He creado un método de extensión sobre el tipo IQueryable, que toma un subconjunto de entidades y las filtra sobre algunos criterios. Mi problema es que no puedo devolver una expresión de Unión hecha de las variables, sin que todas se inicialicen primero. Los valores nulos, como aprears, no son válidos.¿cómo debo inicializar las variables IQueryable, antes de usar una expresión de Unión?
public static IQueryable<Person> FilterHairColors(this IQueryable<Person> subQuery, string[] hairColors)
{
IQueryable<Person> q1 = null;
IQueryable<Person> q2 = null;
IQueryable<Person> q3 = null;
IQueryable<Person> q4 = null;
foreach (var value in hairColors)
{
switch (value)
{
case "1":
q1 = subQuery.Where(p => p.HairColor_bright == true);
break;
case "2":
q2 = subQuery.Where(p => p.HairColor_brown == true);
break;
case "3":
q3 = subQuery.Where(p => p.HairColor_dark == true);
break;
case "4":
q4 = subQuery.Where(p => p.HairColor_red == true);
break;
}
}
return q1.AsQueryable().Union(q2.AsQueryable()).Union(q3.AsQueryable()).Union(q4.AsQueryable());
}
El bloque de código que se presenta es parte de varios más, y cada uno produce un subconjunto de datos, transportada a un método de filtrado posterior de esta manera:
results = persons.FilterGender(vm.gender).FilterAge(vm.age).FilterHeight(vm.height)......
Entonces, ¿cómo debo condicionar el rendimiento de Union con variables no nulas? –
He agregado una propuesta. – usr
Gracias 'usr'. ¿Puedes pensar en una forma más simple e intuitiva de acceder a mi problema? –