Entity framework core 如何使用EF PLUS筛选孙子孙女

Entity framework core 如何使用EF PLUS筛选孙子孙女,entity-framework-core,ef-core-2.2,entity-framework-plus,Entity Framework Core,Ef Core 2.2,Entity Framework Plus,我想使用Entityframework Plus访问父级及其唯一活动的子级和活动的孙子级 关系 父母->子女->孙辈 var parent = await _dbContext.Parent .IncludeFilter(p=>p.Children.Where(c=>c.IsActive == true)) .IncludeFilter(p=>p.Children.Select(c=>c.GrandChildren.Wh

我想使用Entityframework Plus访问
父级
及其唯一活动的
子级
和活动的
孙子级

关系
父母->子女->孙辈

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()

上述查询不起作用。孩子们不会被过滤。它返回所有子级,包括非活动子级。但是孙辈会被过滤(但是我猜孙辈会在内存中而不是在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()

这就是我最后使用的,除了你不需要第一个过滤器