Utworzono metodę rozszerzenia na typ IQueryable, który pobiera podzbiór encji i filtruje je według pewnych kryteriów. Mój problem polega na tym, że nie mogę zwrócić wyrażenia Unii ze zmiennych, bez uprzedniego zainicjowania wszystkiego. Wartości null, jako zaległości, są niepoprawne.Jak powinienem zainicjować zmienne IQueryable, zanim użyję wyrażenia Unii?
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());
}
Przedstawiony blok kodu jest częścią kilka więcej, a każdy tworzy podzbiór danych, przenoszenia do kolejnego sposobu filtrowania w ten sposób:
results = persons.FilterGender(vm.gender).FilterAge(vm.age).FilterHeight(vm.height)......
W takim razie, w jaki sposób kondycjonować Unię, wykonując ją przy zmiennych niezerowych? –
Dodałem propozycję. – usr
Dzięki "usr". Czy możesz wymyślić prostszy, intuicyjny sposób na uzyskanie dostępu do mojego problemu? –