我有几张桌子,如:
用户-> UserRole ->角色
我正在使用EF核心2
我有个疑问
_dbContext.User.Include(x=>x.UserRoles).ThenInclude(y=>y.Roles).Where(x.Active)角色表还有一个活动(Bool)列。
如何筛选角色,使其仅返回活动为真的位置。是否需要执行一些复杂的条件遍历所有表,因为我无法访问where子句中的角色变量。
此外,这是不是会更容易在EF核心3?
发布于 2019-09-23 10:43:40
默认情况下,EF不支持在Include方法中进行筛选。它在EF Core 3.x中也不支持它
免责声明:我是项目实体框架+的所有者
EF+ 查询IncludeFilter (免费和开放源码)允许轻松过滤包含的实体。
还不支持ThenInclude,但您只需包含最后一个过滤器就可以具有相同的行为。
示例:
_dbContext.User
.IncludeFilter(x=>x.UserRoles)
.IncludeFilter(x=>x.UserRoles.SelectMany(y => y.Roles.Where(z => z.Active)))发布于 2019-09-20 15:53:51
请注意,这不是一个直截了当的答案,但如果这是“正常”的要求,也就是说,您总是,或者几乎总是希望只返回活动角色,您可能希望查看全局过滤器,这是自EF Core 2.x以来就存在的特性。全局过滤器允许您设置每个实体的限制,例如"Active = true“、"IsDeleted = false”等。如果需要,可以关闭全局筛选器。
至于您的答案,除了查看角色实体,过滤它,然后投影回您想要的根实体AFAIK之外,没有明显的方法可以做到这一点。
https://stackoverflow.com/questions/58031616
复制相似问题