如何使用 EF PLUS 过滤 grand children

How to filter grand children using EF PLUS

我想使用 Entityframework Plus

到达 Parent 及其唯一活跃的 Children 和活跃的 Grand Children

关系
Parent -> Children -> 盛大Children

var parent = await _dbContext.Parent
             .IncludeFilter(p=>p.Children.Where(c=>c.IsActive == true))
             .IncludeFilter(p=>p.Children.Select(c=>c.GrandChildren.Where(gc=>gc.IsActive ==true)))
             .Where(p=>p.ParnetID == 1234)
             .SingleOrDefaultAsync()

以上查询无效。 children 不会被过滤。它 returns 所有 Children 包括不活动的 children。然而 GrandChildren 被过滤了(不过我猜 grand childeren 在内存中被过滤而不是在 sql 中)

您必须在第二次使用 IncludeFilter 时在子项上也包括过滤器,否则,您将包括未过滤的子项。

var parent = await _dbContext.Parent
             .IncludeFilter(p=>p.Children.Where(c=>c.IsActive == true))
             .IncludeFilter(p=>p.Children.Where(c=>c.IsActive == true).Select(c=>c.GrandChildren.Where(gc=>gc.IsActive ==true)))
             .Where(p=>p.ParnetID == 1234)
             .SingleOrDefaultAsync()

这就是我最终使用的。这将创建 3 sql 个语句

var parent = await _dbContext.Parent
             .IncludeFilter(p=>p.Children.Where(c=>c.IsActive == true).Select(c=>c.GrandChildren.Where(gc=>gc.IsActive ==true)))
             .Where(p=>p.ParnetID == 1234)
             .SingleOrDefaultAsync()