1 対多の関係 (EF) があり、1 の関係をフィルター処理し、多の関係をフィルター処理するクエリを作成したいと考えています。
例:会社には多くの従業員がいます
Company.Name = "ZonSoft" でフィルタリングし、Company.Employees に "Hesius" という名前の従業員が少なくとも 1 人いるクエリを作成します。
from comp in data.Companies.Include("Employees")
where comp.Name = "Zonsoft" AndAlso comp.Employees.Any(Function(em) em.Name = "Hesius")
select comp
これは問題なく動作しますが、コンパイル時にフィルターが不明な場合はどうなるでしょうか? ユーザーは多くのフィルター (名前、年齢など) から選択できますが、そのためのコードをあまり書きたくありません。
Expression と linqkit を試していますが、Employees リレーションでフィルターを機能させることができません。
'
exp1 as Expression(Of Func(Of Company, Boolean) = Function(comp) comp.Name = "Zonsoft"
exp2 as Expression(Of Func(Of Employee, Boolean) = Function(emp) emp.Name = "Hesius"
これら 2 つのフィルターを 1 つのクエリで組み合わせるにはどうすればよいですか? または、希望する結果を得るにはどうすればよいですか?
これは機能します: '
From comp in data.Companies.Include("Employees")
.Where(exp1)
Select comp.
私はこのようなものを探しています:
From comp in data.Companies.Include("Employees")
.Where(exp1 AndAlso comp.Employees.Any(exp2))
Select cc