在实体框架中使用条件包含条件

时间:2020-01-26 07:55:42

标签: c# entity-framework-core

return _companyRepository.GetAll().Where(company => company.Id == Id)
             .Include(company => company.offices.Where(o => o.IsActive))
             .ThenInclude(office => office.People.Where(p => p.IsFired))
             .ThenInclude(person => person.Children)
             .ToList(); 

如何使用Entity Framework Core吸引所有活跃办公室的所有被解雇人员?

我收到此错误:

Where子句在ThenInclude或Include内无效

company.offices.Where(o => o.IsActive) 
office.People.Where(p => p.IsFired)

我知道我不能在Where中使用Include。问题是如何使用Include子句过滤数据?

2 个答案:

答案 0 :(得分:2)

不可能。

我建议四处寻找那里列出的任何第三方库,例如:

EntityFramework.Filters

Query IncludeFilter

How to filter “Include” entities in entity framework?

答案 1 :(得分:1)

如果您在查询中使用数据,则无需使用任何IncludeInclude只是禁用延迟加载的一种方法。 Include控制是否在导航属性中填充数据。 Include不能过滤任何内容。

您的查询还将返回公司(有人员)而不是人员。

  return _companyRepository.GetAll().Where(company => company.Id == Id)
         .SelectMany(company => company.offices)
         .Where(o => o.IsActive)
         .SelectMany(office => office.People)
         .Where(p => p.IsFired) 
         .Include(person => person.Children)
         .ToList(); 

这将创建一个包含人员(包括其子女)的列表。 最后一个include控件说,所有子项均已加载此查询。如果删除此include,您仍然可以访问子级,但不是按需加载或延迟加载。您不会注意到程序功能的任何差异,但是会注意到与sql-server的通信。