如何使用 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()
我想使用 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()