Entity framework core 如何使用EF PLUS筛选孙子孙女
我想使用Entityframework 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
父级
及其唯一活动的子级
和活动的孙子级
关系父母->子女->孙辈
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()
这就是我最后使用的,除了你不需要第一个过滤器