IQueryableタイプの拡張メソッドを作成しました。これは、エンティティのサブセットを取得し、いくつかの基準でそれらをフィルタリングします。私の問題は、すべてを最初に初期化しないと、変数で構成されたユニオン式を返すことができないことです。aprearsとしてのnull値は無効です。
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());
}
提示されたコードブロックはさらにいくつかの一部であり、それぞれがデータのサブセットを生成し、次の方法で後続のフィルタリングメソッドに伝達されます。
results = persons.FilterGender(vm.gender).FilterAge(vm.age).FilterHeight(vm.height)......