LinqKit и фильтрация подзапроса - PullRequest
2 голосов
/ 08 марта 2012

У меня есть отношение «Один ко многим» (EF), и я хочу написать запрос, который фильтрует отношение «Один» И фильтрует отношение «Многие».

Например: в компании много сотрудников

Напишите запрос, который фильтрует Company.Name = "ZonSoft" и где Company.Employees имеет хотя бы один сотрудник с именем "Гесиус"

from comp in data.Companies.Include("Employees")
where comp.Name = "Zonsoft" AndAlso comp.Employees.Any(Function(em) em.Name = "Hesius")
select comp

Это прекрасно работает, но что, если фильтры не известны во время компиляции? Пользователь может выбрать из множества фильтров (имя, возраст, ...), и я не хочу писать слишком много код для этого.

Я экспериментирую с Expression и linqkit. но я не могу заставить фильтр работать в отношении сотрудников.

'

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"

Как мне объединить эти два фильтра в одном запросе? Или как получить желаемый результат?

это работает: *

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
...