EF Core 10 中 LeftJoin 和 RightJoin 运算符在 LINQ 查询中的应用
- 作者: 五速梦信息网
- 时间: 2026年04月20日 04:36
前言
最近发现 EF Core 10 中的新增功能引入了在 LINQ 中支持 LeftJoin 和 RightJoin 运算符查询的新功能。在 EF Core 10 之前,开发人员需要通过复杂的组合查询实现 LEFT JOIN 需要在特定配置中执行SelectMany、GroupJoin 和 DefaultIfEmpty 操作。
本文咱们一起来看看在 EF Core 中使用 LeftJoin 和 RightJoin 运算符进行左右连接查询的代码简洁度。
环境准备
在此之前我们需要先安装 .NET 10 开发环境。
https://dotnet.microsoft.com/zh-cn/download/dotnet/10.0
需要安装最新的 Visual Studio 2022 预览版或者使用 Visual Studio Code 和 C# 开发工具包扩展或者使用 Rider 来配合 .NET 10 使用。Visual Studio 2022 预览版:https://visualstudio.microsoft.com/zh-hans/vs/preview
C# 开发工具包扩展:https://marketplace.visualstudio.com/items?itemName=ms-dotnettools.csdevkit
EF Core指定使用预发行版本

指定项目目标框架

GroupJoin + SelectMany + DefaultIfEmpty 实现左连接
> > > 实现原理:GroupJoin + SelectMany + DefaultIfEmpty 实现左连接。该模式包括在多个数据源之间创建 GroupJoin,然后通过对分组源使用 SelectMany 运算符与 DefaultIfEmpty 来平展分组,从而在内部不具有相关元素时匹配 null。 >
GroupJoin: 将两个序列按关联键进行分组连接,生成分组的嵌套结构。
SelectMany: 将嵌套集合(如集合的集合)展开为单一序列。
DefaultIfEmpty: 会生成一个 包含 null 的默认条目,确保左表记录不被过滤。
var leftJoinQuery = from c in db.Classes join t in db.Teachers on c.TeacherID equals t.TeacherID into teacherGroup from t in teacherGroup.DefaultIfEmpty() select new { c, t }; var leftJoinQuery2 = db.Classes // 第一步:GroupJoin 创建分组关联 .GroupJoin( db.Teachers, c => c.TeacherID,// 左表关联键(Class 的 TeacherID) t => t.TeacherID,// 右表关联键(Teacher 的 TeacherID) (c, teacherGroup) => new { Class = c, Teachers = teacherGroup }) // 第二步:SelectMany 展开分组并处理空值 .SelectMany( temp => temp.Teachers.DefaultIfEmpty(),// 确保即使无关联教师也保留 Class 班级信息 (temp, t) => new { temp.Class, Teacher = t });
LeftJoin 运算符查询
var newLeftJoinQuery = db.Classes .LeftJoin(db.Teachers, c => c.TeacherID, t => t.TeacherID, (c, t) => new { Class = c, Teacher = t }); Console.WriteLine("执行SQL=>>> " + newLeftJoinQuery.ToQueryString());
RightJoin 运算符查询
var newRightJoinQuery = db.Teachers .RightJoin(db.Classes, t => t.TeacherID, c => c.TeacherID, (t, c) => new { Teacher = t, Class = c }); Console.WriteLine("执行SQL=>>> " + newRightJoinQuery.ToQueryString());
参考文章
https://learn.microsoft.com/zh-cn/ef/core/what-is-new/ef-core-10.0/whatsnew
C#/.NET/.NET Core拾遗补漏
本文已收录至C#/.NET/.NET Core拾遗补漏合集中,更多C#/.NET/.NET Core相关知识点欢迎查阅。
🚀C#/.NET/.NET Core拾遗补漏Gitee合集:https://gitee.com/ysgdaydayup/DotNetGuide/blob/main/docs/DotNet/DotNetStudy.md
📚C#/.NET/.NET Core拾遗补漏GitHub合集:https://github.com/YSGStudyHards/DotNetGuide/blob/main/docs/DotNet/DotNetStudy.md

相关文章
-
EdgeIt.JS 自动提取透明图片的图像轮廓,并进行描边
EdgeIt.JS 自动提取透明图片的图像轮廓,并进行描边
- 互联网
- 2026年04月20日
-
Easyswoole学习笔记,快速上手
Easyswoole学习笔记,快速上手
- 互联网
- 2026年04月20日
-
Dubbo集群容错机制:原理、策略与自定义
Dubbo集群容错机制:原理、策略与自定义
- 互联网
- 2026年04月20日
-
Electron 使用方法,从入门到精通
Electron 使用方法,从入门到精通
- 互联网
- 2026年04月20日
-
eps是什么材质(eps是什么材质有毒吗)
eps是什么材质(eps是什么材质有毒吗)
- 互联网
- 2026年04月20日
-
erp什么意思简单来说(erp是做什么的)
erp什么意思简单来说(erp是做什么的)
- 互联网
- 2026年04月20日





