admin管理员组文章数量:1027836
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 开发环境。
- .0
需要安装最新的 Visual Studio 2022 预览版或者使用 Visual Studio Code 和 C# 开发工具包扩展或者使用 Rider 来配合 .NET 10 使用。
- Visual Studio 2022 预览版:
- C# 开发工具包扩展:.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 运算符查询
代码语言:javascript代码运行次数:0运行复制 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 运算符查询
代码语言:javascript代码运行次数:0运行复制 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());
参考文章
- .0/whatsnew
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 开发环境。
- .0
需要安装最新的 Visual Studio 2022 预览版或者使用 Visual Studio Code 和 C# 开发工具包扩展或者使用 Rider 来配合 .NET 10 使用。
- Visual Studio 2022 预览版:
- C# 开发工具包扩展:.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 运算符查询
代码语言:javascript代码运行次数:0运行复制 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 运算符查询
代码语言:javascript代码运行次数:0运行复制 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());
参考文章
- .0/whatsnew
本文标签: EF Core 10 现已支持 LeftJoin 和 RightJoin 运算符查询了!
版权声明:本文标题:EF Core 10 现已支持 LeftJoin 和 RightJoin 运算符查询了! 内容由热心网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://it.en369.cn/jiaocheng/1747454703a2167157.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论