EF не делает это легким, потому что идет вразрез с философией того, как EF предназначен для работы.Если бы было легко написать этот запрос так, чтобы коллекция Bars
каждой сущности Foo
содержала только «активные» сущности Bar
, то каждая сущность Foo
не была бы точной моделью состояния базы данных.
С другой стороны, если вы пишете запрос с использованием проекции (вместо непосредственного извлечения сущностей Foo), вы получаете большую гибкость.Например, вы могли бы написать запрос следующим образом:
var query =
from f in ObjectContext.Foos
where f.Active
select new { Foo = f, ActiveBars = f.Bars.Where(b=>b.Active)}
В этот момент вы могли бы написать цикл foreach, чтобы заново связать активные Bar
сущности с каждым Foo
entity:
var results = query.ToList();
foreach (var r in results)
r.Foo.Bars = r.ActiveBars;
И, наконец, выполнить запрос LINQ локально, чтобы получить результаты:
return (from r in results select r.Foo).ToList();
Я думаю, что стратегия, которую я только что обрисовал в общих чертах, будет хорошо работать только для отображениясценарий, но я не буду пытаться обновить сущности, полученные таким образом.