EF Core 5.0+ 支持通过 Include().Where() 实现关联集合的数据库端筛选,需配合 AsSplitQuery() 避免笛卡尔积;多级筛选可用 ThenInclude().Where();更灵活场景推荐 Select 投影。
EF Core 本身没有内置的 IncludeFilter 方法,但自 EF Core 5.0 起,官方支持在 Include() 中结合 Where、OrderBy 等操作符实现**筛选性加载关联数据**(也称“过滤的包含”)。这个功能常被开发者误称为 IncludeFilter,实际是通过 Include().ThenInclude().Where() 链式表达式完成的。
默认 Include(b => b.Posts) 会加载博客下所有文章。如果只想加载「已发布」的文章,不能直接写 .Include(b => b.Posts.Where(p => p.IsPublished))(语法错误),而要使用 Include 的扩展方式:
List):用 Include(...).Where(...) 形式Microsoft.EntityFrameworkCore 命名空间AsSplitQuery() 或启用全局分割查询,否则可能触发笛卡尔积示例:只加载辽宁省下「状态为启用」的市级数据
var provinces = context.Provinces
.Where(p => p.Name == "辽宁省")
.Include(p => p.Cities)
.ThenInclude(c => c.Districts)
.Include(p => p.Cities)
.Where(c => c.Status == true) // ← 关键:筛选 Cities 集合
.AsSplitQuery() // 推荐加上,避免结果膨胀
.ToList();
若需对更深层级做筛选(比如只加载某市下「2025 年新增」的区县),可在 ThenInclude 后继续加 Where:
IEnumerable 类型),不能用于单个引用属性(如 Author)ON 子句,不是内存过滤LEFT JOIN ... ON ... AND,确保主实体不因子数据不满足条件而丢失示例:查博客,只包含「2025 年发布的文章」及其「点赞数 > 10 的评论」
var blogs = context.Blogs
.Include(b => b.Posts)
.ThenInclude(p => p.Comments)
.Where(c => c.Likes > 10)
.Include(b => b.Posts)
.Where(p => p.PublishDate.Year == 2025)
.AsSplitQuery()
.ToList();
当 Include().Where() 不够灵活(比如要跨表条件、聚合或排序),推荐改用 Select 投影——它在数据库层完成筛选与字段裁剪,性能更好、语义更清晰:
Count、Max 等聚合示例:只取博客名、文章标题和评论数(仅含已发布文章)
var blogSummary = context.Blogs
.Select(b => new
{
BlogName = b.Name,
Posts = b.Posts
.Where(p => p.IsPublished)
.Select(p => new
{
Title = p.Title,
CommentCount = p
.Comments.Count()
})
})
.ToList();
这类筛选性加载容易出错,务必注意:
Include 链中对同一集合多次 Where,会编译失败Where 必须紧跟在 Include 或 ThenInclude 后,不能隔开调用AsSplitQuery(),一对多+多对多嵌套可能导致结果集爆炸DateTime.Now.Date 应改用 EF.Functions.DateDiffDay 或参数化)基本上就这些。用对 Include().Where() 和 Select,就能在 EF Core 里干净利落地实现按需加载关联数据。
# microsoft
# datediff
# sql
# count
# 命名空间
# select
# date
# include
# 数据库
# 笛卡尔
# 加载
# 链式
# 博客
# 的是
# 辽宁省
# 子句
# 能在
# 这类
# 可在
相关文章:
如何快速搭建自助建站会员专属系统?
广平建站公司哪家专业可靠?如何选择?
佛山企业网站制作公司有哪些,沟通100网上服务官网?
微信小程序 五星评分(包括半颗星评分)实例代码
大型企业网站制作流程,做网站需要注册公司吗?
香港服务器如何优化才能显著提升网站加载速度?
重庆网站制作公司哪家好,重庆中考招生办官方网站?
清除minerd进程的简单方法
如何有效防御Web建站篡改攻击?
建站之星后台密码遗忘或太弱?如何重置与强化?
如何自定义建站之星网站的导航菜单样式?
武汉外贸网站制作公司,现在武汉外贸前景怎么样啊?
建站主机选购指南:核心配置优化与品牌推荐方案
如何快速查询域名建站关键信息?
魔毅自助建站系统:模板定制与SEO优化一键生成指南
建站之星如何防范黑客攻击与数据泄露?
如何选择高效可靠的多用户建站源码资源?
建站之星微信建站一键生成小程序+多端营销系统
如何快速重置建站主机并恢复默认配置?
实现点击下箭头变上箭头来回切换的两种方法【推荐】
如何在IIS7中新建站点?详细步骤解析
php能控制zigbee模块吗_php通过串口与cc2530 zigbee通信【介绍】
建站之星后台密码如何安全设置与找回?
如何在Ubuntu系统下快速搭建WordPress个人网站?
香港代理服务器配置指南:高匿IP选择、跨境加速与SEO优化技巧
保定网站制作方案定制,保定招聘的渠道有哪些?找工作的人一般都去哪里看招聘信息?
网站制作企业,网站的banner和导航栏是指什么?
高防服务器:AI智能防御DDoS攻击与数据安全保障
头像制作网站在线制作软件,dw网页背景图像怎么设置?
建站中国官网:模板定制+SEO优化+建站流程一站式指南
建站一年半SEO优化实战指南:核心词挖掘与长尾流量提升策略
建站之星logo尺寸如何设置最合适?
如何在局域网内绑定自建网站域名?
个人摄影网站制作流程,摄影爱好者都去什么网站?
如何批量查询域名的建站时间记录?
网站网页制作电话怎么打,怎样安装和使用钉钉软件免费打电话?
免费制作统计图的网站有哪些,如何看待现如今年轻人买房难的情况?
企业网站制作费用多少,企业网站空间一般需要多大,费用是多少?
Python多线程使用规范_线程安全解析【教程】
建站主机选虚拟主机还是云服务器更好?
详解jQuery停止动画——stop()方法的使用
太原网站制作公司有哪些,网约车营运证查询官网?
如何通过免费商城建站系统源码自定义网站主题与功能?
存储型VPS适合搭建中小型网站吗?
python的本地网站制作,如何创建本地站点?
如何获取PHP WAP自助建站系统源码?
如何用IIS7快速搭建并优化网站站点?
专业网站制作企业网站,如何制作一个企业网站,建设网站的基本步骤有哪些?
黑客入侵网站服务器的常见手法有哪些?
百度网页制作网站有哪些,谁能告诉我百度网站是怎么联系?
*请认真填写需求信息,我们会在24小时内与您取得联系。