EF Core 10 中 LeftJoin 和 RightJoin 运算符在 LINQ 查询中的应用
笔记哥 /
04-29 /
20点赞 /
0评论 /
662阅读
## 前言
最近发现 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 的默认条目,确保左表记录不被过滤。
```csharp
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 运算符查询
```csharp
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 运算符查询
```csharp
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://github.com/dotnet/efcore/issues/35379
- 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

本文来自投稿,不代表本站立场,如若转载,请注明出处:http//www.knowhub.vip/share/2/2971
- 热门的技术博文分享
- 1 . ESP实现Web服务器
- 2 . 从零到一:打造高效的金仓社区 API 集成到 MCP 服务方案
- 3 . 使用C#构建一个同时问多个LLM并总结的小工具
- 4 . .NET 原生驾驭 AI 新基建实战系列Milvus ── 大规模 AI 应用的向量数据库首选
- 5 . 在Avalonia/C#中使用依赖注入过程记录
- 6 . [设计模式/Java] 设计模式之工厂方法模式
- 7 . 5. RabbitMQ 消息队列中 Exchanges(交换机) 的详细说明
- 8 . SQL 中的各种连接 JOIN 的区别总结!
- 9 . JavaScript 中防抖和节流的多种实现方式及应用场景
- 10 . SaltStack 远程命令执行中文乱码问题
- 11 . 推荐10个 DeepSeek 神级提示词,建议搜藏起来使用
- 12 . C#基础:枚举、数组、类型、函数等解析
- 13 . VMware平台的Ubuntu部署完全分布式Hadoop环境
- 14 . C# 多项目打包时如何将项目引用转为包依赖
- 15 . Chrome 135 版本开发者工具(DevTools)更新内容
- 16 . 从零创建npm依赖,只需执行一条命令
- 17 . 关于 Newtonsoft.Json 和 System.Text.Json 混用导致的的序列化不识别的问题
- 18 . 大模型微调实战之训练数据集准备的艺术与科学
- 19 . Windows快速安装MongoDB之Mongo实战
- 20 . 探索 C# 14 新功能:实用特性为编程带来便利
- 相关联分享
- .NET 原生驾驭 AI 新基建实战系列Milvus ── 大规模 AI 应用的向量数据库首选
- 关于 Newtonsoft.Json 和 System.Text.Json 混用导致的的序列化不识别的问题
- .NET Core中的配置Configuration实战
- 在 .NET 中使用 Sqids 快速的为数字 ID 披上神秘短串,轻松隐藏敏感数字!
- 常用的 Visual Studio 2022 扩展插件推荐:生产力必备工具
- 解锁.NET 9性能优化:内存、异步、代码与Web全方位指南
- 一款 .NET 开源、免费、轻量级且非侵入性的防火墙软件
- .NET 10 进展之 CoreCLR Interpreter
- 一款基于 .NET 开源、可以拦截并修改 WinSock 封包的 Windows 软件
- 使用MCP C# SDK开发MCP Server + Client
- Gradio.Net:加速 .NET 的 Web 应用开发
- Magick.NET 支持100多种格式的强大 .NET 图片处理库
- 2025年C#/.NET/.NET Core优秀项目和框架推荐
- [开源][.Net Framework 4.0] SimpleLiveDataFeed v1.0更新:增加NuGet包
- EF Core 10 中 LeftJoin 和 RightJoin 运算符在 LINQ 查询中的应用
- .NET 10 Preview 4中ASP.NET Core 改进
- 通过 Nuke 为 Dotnet Core 应用构建自动化流程
- ASP.NET Core 实现的领域驱动设计框架推荐
- 如何在 .NET 中 使用 ANTLR4
- 如何把ASP.NET Core WebApi打造成Mcp Server
- C#/.NET/.NET Core技术前沿周刊 | 第 39 期(2025年5.19-5.25)
- .NET 开源工业视觉系统 OpenIVS 快速搭建自动化检测平台
- C# LINQ 快速入门实战指南,建议收藏学习!
- 解决.NET AOT交叉编译到Linux - arm64的坑
- 10年+.NET Coder 心语 ── 单一职责原则的思维:为什么你的代码总在"牵一发而动全身"
- 深入理解.NET Core中的配置Configuration和应用
- ASP.NET Core EFCore 属性配置与DbContext 详解
- 3款基于.NET开源且免费的远程桌面工具分享
- .NET 的全新低延时高吞吐自适应 GC - Satori GC