首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在实体框架内核中执行ThenInclude后进行过滤

在实体框架内核中执行ThenInclude后进行过滤
EN

Stack Overflow用户
提问于 2019-09-20 15:49:38
回答 2查看 619关注 0票数 2

我有几张桌子,如:

用户-> UserRole ->角色

我正在使用EF核心2

我有个疑问

代码语言:javascript
复制
_dbContext.User.Include(x=>x.UserRoles).ThenInclude(y=>y.Roles).Where(x.Active)

角色表还有一个活动(Bool)列。

如何筛选角色,使其仅返回活动为真的位置。是否需要执行一些复杂的条件遍历所有表,因为我无法访问where子句中的角色变量。

此外,这是不是会更容易在EF核心3?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-09-23 10:43:40

默认情况下,EF不支持在Include方法中进行筛选。它在EF Core 3.x中也不支持它

免责声明:我是项目实体框架+的所有者

EF+ 查询IncludeFilter (免费和开放源码)允许轻松过滤包含的实体。

还不支持ThenInclude,但您只需包含最后一个过滤器就可以具有相同的行为。

示例:

代码语言:javascript
复制
_dbContext.User
    .IncludeFilter(x=>x.UserRoles)
    .IncludeFilter(x=>x.UserRoles.SelectMany(y => y.Roles.Where(z => z.Active)))
票数 2
EN

Stack Overflow用户

发布于 2019-09-20 15:53:51

请注意,这不是一个直截了当的答案,但如果这是“正常”的要求,也就是说,您总是,或者几乎总是希望只返回活动角色,您可能希望查看全局过滤器,这是自EF Core 2.x以来就存在的特性。全局过滤器允许您设置每个实体的限制,例如"Active = true“、"IsDeleted = false”等。如果需要,可以关闭全局筛选器。

至于您的答案,除了查看角色实体,过滤它,然后投影回您想要的根实体AFAIK之外,没有明显的方法可以做到这一点。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58031616

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档