Ich habe eine Erweiterungsmethode über IQueryable Typ erstellt, die eine Teilmenge von Entitäten und filtert sie nach einigen Kriterien. Mein Problem ist, dass ich einen Unionsausdruck der Variablen nicht zurückgeben kann, ohne dass alle zuerst initialisiert werden. Nullwerte, so wie sie sind, sind nicht gültig.Wie sollte ich IQueryable-Variablen initialisieren, bevor ein Union-Ausdruck verwendet wird?
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());
}
Der dargestellte Codeblock Teil mehrere mehr ist, und jeder erzeugt eine Untergruppe von Daten, übertragen zu einem nachfolgenden Filterungsverfahren auf diese Weise:
results = persons.FilterGender(vm.gender).FilterAge(vm.age).FilterHeight(vm.height)......
Wie sollte ich Union mit Nicht-Null-Variablen durchführen? –
Ich habe einen Vorschlag hinzugefügt. – usr
Danke 'usr'. Kannst du dir eine einfachere, intuitivere Möglichkeit vorstellen, auf mein Problem zuzugreifen? –