有两种方法可以过滤包含实体。
- 使用投影(请参阅@Eldho答案)
- 使用第三方库
免责声明 :我是Entity framework Plus项目的所有者
EF +查询IncludeFilter可以轻松过滤包含的实体。
context.Entry(hotel) .Collection(x => x.Rooms) .Query() .IncludeFilter(y => y.Reservations .Where(z => z is ExecutiveSuite && z.Reservations.Any()) .Load();
在引擎盖下,图书馆正好进行投影。
Wiki:EF +查询包含过滤器
编辑 :回答子问题
您几乎做到了。房间已包括在内并已过滤,但您未包括预订。
var hotel = context.Hotels // Include only executive suite with a reservation .IncludeFilter(x => x.Rooms.Where(y => y is ExecutiveSuite && y.Reservations.Any())) // Include only reservation from executive suite .IncludeFilter(x => x.Rooms.Where(y => y is ExecutiveSuite).Select(z => z.Reservations)) .First();
编辑:答案评论
我们如何通过包含过滤器包含多级属性
您可以通过指定每个路径(每个IncludeFilter一个)来包含多级
因此
qry.Include("Rooms.Hotel")成为:qry.IncludeFilter(x => x.Rooms) .IncludeFilter(x => x.Rooms.Select(y => y.Hotel))



