EF Core 10 现已支持 LeftJoin 和 RightJoin 运算符查询了!
前言
最近发现 EF Core 10 中的新增功能引入了在 LINQ 中支持 LeftJoin 和 RightJoin 运算符查询的新功能。在 EF Core 10 之前,开发人员需要通过复杂的组合查询实现 LEFT JOIN 需要在特定配置中执行SelectMany、GroupJoin 和 DefaultIfEmpty 操作。
本文咱们一起来看看在 EF Core 中使用 LeftJoin 和 RightJoin 运算符进行左右连接查询的代码简洁度。
环境准备
在此之前我们需要先安装 .NET 10 开发环境。


需要安装最新的 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://github.com/dotnet/efcore/issues/35379
- https://learn.microsoft.com/zh-cn/ef/core/what-is-new/ef-core-10.0/whatsnew
EF Core 10 现已支持 LeftJoin 和 RightJoin 运算符查询了!的更多相关文章
- EF Core 2.1 支持数据库一对一关系
在使用EF Core和设计数据库的时候,通常一对多.多对多关系使用得比较多,但是一对一关系使用得就比较少了.最近我发现实际上EF Core很好地支持了数据库的一对一关系. 数据库 我们先来看看SQL ...
- EF Core使用SQL调用返回其他类型的查询 ASP.NET Core 2.0 使用NLog实现日志记录 CSS 3D transforms cSharp:use Activator.CreateInstance with an Interface? SqlHelper DBHelper C# Thread.Abort方法真的让线程停止了吗? 注意!你的Thread.Abort方法真
EF Core使用SQL调用返回其他类型的查询 假设你想要 SQL 本身编写,而不使用 LINQ. 需要运行 SQL 查询中返回实体对象之外的内容. 在 EF Core 中,执行该操作的另一种方法 ...
- 最新版的EF Core对UWP支持的怎么样
为啥写这篇帖子呢?其实是因为翻微软的文档中心偶然翻到的,于是就出于好奇就试试了,看看用着怎么样. 以前没注意图片,所以我今天发现的时候,显示EF Core3.1支持standard2.0,于是就想试试 ...
- EF Core 三 、 骚操作 (导航属性,内存查询...)
EF Core 高阶操作 本文之前,大家已经阅读了前面的系列文档,对其有了大概的了解 我们来看下EF Core中的一些常见高阶操作,来丰富我们业务实现,从而拥有更多的实现选择 1.EF 内存查找 wh ...
- EF Core使用SQL调用返回其他类型的查询
假设你想要 SQL 本身编写,而不使用 LINQ. 需要运行 SQL 查询中返回实体对象之外的内容. 在 EF Core 中,执行该操作的另一种方法是编写 ADO.NET 代码,并从 EF 获取数据库 ...
- 把旧系统迁移到.Net Core 2.0 日记(10) -- EF core 和之前版本多对多映射区别
EF Core 现在不支持多对多映射,只能做2个一对多映射. 比如Product和Category 我现在定义Product和Category是多对多关系. 那么实体定义如下: public clas ...
- ASP.NET Core 开发-Entity Framework (EF) Core 1.0 Database First
ASP.NET Core 开发-Entity Framework Core 1.0 Database First,ASP.NET Core 1.0 EF Core操作数据库. Entity Frame ...
- EF Core 1.0中使用Include的小技巧
(此文章同时发表在本人微信公众号"dotNET每日精华文章",欢迎右边二维码来关注.) 题记:由于EF Core暂时不支持Lazy Loading,所以利用Include来加载额外 ...
- 利用EF Core的Join进行多表查询
背景 话说有这么一家子,老公养了一条狗,老婆养了一只猫. 数据库的设计 人表 宠物表 通过表可以知道,宠物通过Owner指向主人的Id. 问题来了,我要和故事开头一样,老公-狗,老婆-猫,对应起来,怎 ...
- .net core Entity Framework 与 EF Core
重点讲 Entity Framework Core ! (一)Entity Framework 它是适用于.NET 的对象关系映射程序 (ORM),现在的EF6已经是久经沙场,并经历重重磨难,获得一致 ...
随机推荐
- SQL注入的业务场景以及危害
SQL注入的业务场景以及危害 在现代Web应用中,数据库是存储和检索数据的核心组件.然而,当Web应用未能正确验证和过滤用户输入时,就可能会遭受SQL注入攻击.SQL注入是一种严重的安全漏洞,它允许攻 ...
- 定制化训练DeepSeek模型:LoAR、COT推理与SFT技术应用
DeepSeek-R1 模型微调系列 DeepSeek-R1 模型微调系列一. 前言介绍本文内容:1.1 项目背景1.2 LoRA和 QLoRA 简介1.3 LLaMA 架构和 Qwen 架构LLaM ...
- 数字先锋 | 央企首批!天翼云助力中国石化率先完成全尺寸DeepSeek国产化部署!
自2025年春节以来,DeepSeek的全新开源推理模型在全球范围内迅速走红,成为各界关注的焦点,同时引发国产AI发展浪潮.众多国内企业相继接入DeepSeek系列模型,以提升企业智能化水平,加速业务 ...
- JUC并发—6.AQS源码分析二
大纲 1.ReentractReadWriteLock的基本原理 2.基于AQS实现的ReentractReadWriteLock 3.ReentractReadWriteLock如何竞争写锁 4.R ...
- 功率MOS管的参数说明
图解功率MOS管的每一个参数! 最大额定参数 最大额定参数,所有数值取得条件(Ta=25℃) VDSS 最大漏-源电压 在栅源短接,漏-源额定电压(VDSS)是指漏-源未发生雪崩击穿前所能施加的最 ...
- 浅析Bootstrap中Tab(标签页)的使用方法
Bootstrap 导航元素使用相同的标记和基类,改变修饰的class,可以在不同的样式间进行切换如".nav-pills"(胶囊式导航)与 ".nav-tabs&quo ...
- 斐讯N1盒子刷入Armbian并安装Docker拉取网络下行流量教程
一直在跑PCDN,目前主推八米云跟点心云,八米单价比点心更高,业务都一样,直播业务. 两种刷机教程我也发下. 八米云:点此跳转 点心云:点此跳转 最近各运营商对PCDN打击力度加大,需求拉取下行流量的 ...
- clickhouse--表引擎
表引擎 表引擎(即表的类型)决定了: 1)数据的存储方式和位置,写到哪里以及从哪里读取数据 2)支持哪些查询以及如何支持. 3)并发数据访问. 4)索引的使用(如果存在). 5)是否可以执行多线程请求 ...
- 机器学习 | 强化学习(5) | 价值函数拟合(Value Function Approximation)
价值函数拟合(Value Function Approximation) 导论(Introduction) 目前的价值函数都是基于打表法(lookup table)进行穷举 对于所有状态\(s\)都有 ...
- 【MathType】word2016数学公式编号
问题 毕业论文排版中,对数学公式需要类似(3-1)的格式. 解决技巧 在写论文初稿的时候,先不要于公式的编号,先给它编一个号,比如(3) (2) (4)的. 最后写完了以后,再再添加section , ...