LINQ 和 LINQ 扩展方法(2)

1.表联接(连接)

 Join() 相当于 join  on  equals  默认是inner join内联系  JoinGroup()是左外联

  • 数据关联Join 是在数据库查询中常用的操作,用于基于某个共同的键关联两个表。在内存中处理集合时,LINQ的 Join 方法提供了相似的功能。
  • 数据整合:通过Join,可以将学生信息和教室信息整合到一个对象中,便于后续的处理和展示。
  • 用法
  • 关联数据:当你需要将两个相关联的数据集合(如学生和教室)组合成一个集合时,可以使用 Join
  • 创建DTO:在处理多层数据关联时,将相关的数据封装到一个DTO中可以简化后续的数据处理逻辑。

2.代码示例

// 1.创建数据集合:
// 代码中没有显示数据集合的定义,但通常你会有两个数据集合,例如 students1 和 classRooms,它们分别存储学生信息和教室信息。// 定义一个学生列表
List<Student> students = new List<Student>()
{new Student() {StudentId = 1 ,StudentName = "张三" ,ClassRoomId = 1},new Student() {StudentId = 2 ,StudentName = "李四" ,ClassRoomId = 2},new Student() {StudentId = 3 ,StudentName = "王五" ,ClassRoomId= 3},new Student() {StudentId = 4 ,StudentName = "赵六" ,ClassRoomId = 2},new Student() {StudentId = 5 ,StudentName = "孙琦" ,ClassRoomId = 3}
};
// 定义一个班级列表
List<ClassRoom> classRooms = new List<ClassRoom>()
{new ClassRoom() {ClassRoomId = 1,ClassRoomName = "班级1"},new ClassRoom() {ClassRoomId = 2,ClassRoomName = "班级2"},new ClassRoom() {ClassRoomId = 3,ClassRoomName = "班级3"}
};// Join 方法基于两个集合中元素的关联键将它们结合起来。
// 第一个参数 students1 是要进行联合的主数据集合。
// 第二个参数 classRooms 是要联合的次数据集合。
// 第三个参数 s => s.ClassRoomId 是主数据集合中用于匹配的键选择器函数。
// 第四个参数 cr => cr.ClassRoomId 是次数据集合中用于匹配的键选择器函数。
// 最后的参数 (s, cr) => new StudentDTO() 是结果选择器函数,定义了如何从联合的元素创建新的 StudentDTO 对象。// 1.使用 Join 方法
var result = students.Join(classRooms, s => s.ClassRoomId, cr => cr.ClassRoomId,(s, cr) =>new StudentDTO{StudentId = s.StudentId,StudentName = s.StudentName,ClassRoomId = s.ClassRoomId,ClassRoomName = cr.ClassRoomName});// 2.使用查询语法 join
var result1 = from s in studentsjoin cr in classRooms on s.ClassRoomId equals cr.ClassRoomIdselect new StudentDTO(){StudentId = s.StudentId,StudentName = s.StudentName,ClassRoomId = s.ClassRoomId,ClassRoomName = cr.ClassRoomName};// 3.使用 GroupJoin 方法
var result2 = students.GroupJoin(classRooms, s => s.ClassRoomId, cr => cr.ClassRoomId,(s, cr) =>new {StudentId = s.StudentId,StudentName = s.StudentName,ClassRoomId = s.ClassRoomId,//ClassRoomName = cr.ClassRoomName   // GroupJoin()默认得到右表数量,不能拿右表中的列。Count = cr.Count()   });// 4.使用查询语法 join ... into ...
var result3 = from s in studentsjoin cr in classRooms on s.ClassRoomId equals cr.ClassRoomId into joinResultselect new{StudentId = s.StudentId,StudentName = s.StudentName,ClassRoomId = s.ClassRoomId,Count = joinResult.Count()};// 创建一个学生类
public class Student
{public int StudentId { get; set; }public string StudentName { get; set; }public int ClassRoomId { get; set; }
}// 创建一个班积类public class ClassRoom{public int ClassRoomId { get; set; }public string ClassRoomName { get; set; }}// 创建StudentDTO对象
// StudentDTO 应该是一个数据传输对象(DTO),用于封装学生和教室信息。
public class StudentDTO
{public int StudentId { get; set; }public string StudentName { get; set; }public int ClassRoomId { get; set; }public string ClassRoomName { get; set;}
}

3.join 方法 和 groupjoin方法的区别

1.Join方法用于一对一的关系,而GroupJoin方法用于一对多的关系

2.GroupJoin 可以获取与每个元素匹配的所有元素的集合,而Join只能获取匹配的第一个元素

总结:

代码片段展示了如何使用这两种方法来连接数据集合,并创建包含连接信息的新对象

4. 删除数据

这两个文件包含C#代码片段,展示了如何使用LINQ进行数据集合的联合操作。以下是核心内容的整理:

文件 1

文件 1 包含两个代码片段,它们使用 JoinGroupJoin 方法来连接 students1classRooms 两个数据集合。

  1. 使用 Join 方法

    var result = students1.Join(classRooms, s => s.ClassRoomId, cr => cr.ClassRoomId,(s, cr) => new StudentDTO(){StudentId = s.StudentId,StudentName = s.StudentName,ClassRoomId = s.ClassRoomId,ClassRoomName = cr.ClassRoomName});
    • 这段代码使用 Join 方法将 students1 和 classRooms 集合根据 ClassRoomId 属性进行一对一的匹配,然后创建一个新的 StudentDTO 对象。
  2. 使用查询语法 join

    var sult1 = from s in students1join cr in classRooms on s.ClassRoomId equals cr.ClassRoomIdselect new StudentDTO(){StudentId = s.StudentId,StudentName = s.StudentName,ClassRoomId = s.ClassRoomId,ClassRoomName = cr.ClassRoomName};
    • 这段代码使用查询语法的 join 来实现与第一个代码片段相同的功能。

文件 2

文件 2 包含两个代码片段,使用 GroupJoin 方法来连接 students1classRooms 两个数据集合。

  1. 使用 GroupJoin 方法

    var result2 = students1.GroupJoin(classRooms, s => s.ClassRoomId, cr => cr.ClassRoomId,(s, cr) => new{StudentId = s.StudentId,StudentName = s.StudentName,ClassRoomId = s.ClassRoomId,Count = cr.Count() // GroupJoin() 默认得到右表数量,不能拿右表中的列。});
    • 这段代码使用 GroupJoin 方法将 students1 和 classRooms 集合根据 ClassRoomId 属性进行匹配,但与 Join 不同的是,GroupJoin 可以处理一对多的关系。结果是一个匿名对象,包含学生信息和匹配的教室数量。
  2. 使用查询语法 join ... into ...

    var result3 = from s in students1join cr in classRooms on s.ClassRoomId equals cr.ClassRoomId into joinResultselect new{StudentId = s.StudentId,StudentName = s.StudentName,ClassRoomId = s.ClassRoomId,Count = joinResult.Count() // 这里应该是 joinResult.Count()};
    • 这段代码使用查询语法的 join ... into ... 来实现与第一个代码片段相同的功能,但结果选择器中有一个错误(joinRes 应该是 joinResult)。

总结

  • Join 方法用于一对一的关系,而 GroupJoin 方法用于一对多的关系。
  • GroupJoin 可以获取与每个元素匹配的所有元素集合,而 Join 只能获取匹配的第一个元素。
  • 代码片段展示了如何使用这两种方法来连接数据集合,并创建包含连接信息的新对象。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/893540.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

MySQL8【学习笔记】

第一章前提须知 1.1 需要学什么 Dbeaver 的基本使用SQL 语句&#xff1a;最重要的就是查询&#xff08;在实战的时候&#xff0c;你会发现我们做的绝大部分工作就是 “查询”&#xff09;MySQL 存储过程&#xff08;利用数据库底层提供的语言&#xff0c;去进行业务逻辑的封装…

【JVM】垃圾收集器详解

你将学到 1. Serial 收集器 2. ParNew 收集器 3. Parallel Scavenge 收集器 4. Serial Old 收集器 5. Parallel Old 收集器 6. CMS 收集器 7. G1 收集器 在 Java 中&#xff0c;垃圾回收&#xff08;GC&#xff09;是自动管理内存的一个重要机制。HotSpot JVM 提供了多种…

SOME/IP服务接口

本系列文章将分享我在学习 SOME/IP 过程中积累的一些感悟&#xff0c;并结合 SOME/IP 的理论知识进行讲解。主要内容是对相关知识的梳理&#xff0c;并结合实际代码展示 SOME/IP 的使用&#xff0c;旨在自我复习并与大家交流。文中引用了一些例图&#xff0c;但由于未能找到原作…

编写0号中断的处理程序

实验内容、程序清单及运行结果 编写0号中断的处理程序&#xff08;课本实验12&#xff09; 解&#xff1a; assume cs:code code segment start: mov ax,cs mov ds,ax mov si,offset do mov ax,0 mov es,ax mov di,200h mov cx,offset doend-offset do ;安装中断例…

Android系统开发(十五):从 60Hz 到 120Hz,多刷新率进化简史

引言 欢迎来到“帧率探索实验室”&#xff01;今天&#xff0c;我们要聊聊 Android 11 中对多种刷新率设备的支持。你可能会问&#xff1a;“这和我写代码有什么关系&#xff1f;”别急&#xff0c;高刷新率不仅仅让屏幕更顺滑&#xff0c;还会直接影响用户体验。想象一下&…

基于JAVA的微信点餐小程序设计与实现(LW+源码+讲解)

专注于大学生项目实战开发,讲解,毕业答疑辅导&#xff0c;欢迎高校老师/同行前辈交流合作✌。 技术范围&#xff1a;SpringBoot、Vue、SSM、HLMT、小程序、Jsp、PHP、Nodejs、Python、爬虫、数据可视化、安卓app、大数据、物联网、机器学习等设计与开发。 主要内容&#xff1a;…

ChatGPT结合Excel辅助学术数据分析详细步骤分享!

目录 一.Excel在学术论文中的作用✔ 二.Excel的提示词✔ 三. 编写 Excel 命令 四. 编写宏 五. 执行复杂的任务 六. 将 ChatGPT 变成有用的 Excel 助手 一.Excel在学术论文中的作用✔ Excel作为一种广泛使用的电子表格软件&#xff0c;在学术论文中可以发挥多种重要作用&a…

国内有哪些著名的CRM系统提供商?

嘿&#xff0c;你有没有想过&#xff0c;在这个信息爆炸的时代里&#xff0c;企业怎么才能更好地管理客户关系呢&#xff1f;答案就是使用高效的CRM系统。今天我就来给大家聊聊那些在国际上非常有名的CRM系统提供商吧。 悟空CRM 首先不得不提的就是悟空CRM了&#xff01;这可…

Linux中的几个基本指令(二)

文章目录 1、cp指令例一&#xff1a;例二&#xff1a;例三&#xff1a;例四&#xff1a;例五&#xff1a; 2、mv 指令例一&#xff1a;例二&#xff1a; 3、cat指令例一&#xff1a; 4、tac指令5、which指令6、date指令时间戳&#xff1a;7、zip指令 今天我们继续学习Linux下的…

mock可视化生成前端代码

介绍&#xff1a;mock是我们前后端分离的必要一环、ts、axios编写起来也很麻烦。我们就可以使用以下插件&#xff0c;来解决我们的问题。目前支持vite和webpack。&#xff08;配置超级简单&#xff01;&#xff09; 欢迎小伙伴们提issues、我们共建。提升我们的开发体验。 vi…

9. 神经网络(一.神经元模型)

首先&#xff0c;先看一个简化的生物神经元结构&#xff1a; 生物神经元有多种类型&#xff0c;内部也有复杂的结构&#xff0c;但是可以把单个神经元简化为3部分组成&#xff1a; 树突&#xff1a;一个神经元往往有多个树突&#xff0c;用于接收传入的信息。轴突&#xff1a;…

Web 音视频(二)在浏览器中解析视频

前言 浏览器中已经能直接播放视频&#xff0c;为什么还需要手动写代码解析&#xff1f; 因为&#xff0c;某些场景需要对视频进行更细致的处理&#xff0c;比如截取关键帧、提取视频中的文字、人物打码、极低延时播放视频等等。 总之&#xff0c;除了最单纯的视频播放外&…

ETLCloud在iPaas中的是关键角色?

在当今的数字化时代&#xff0c;企业越来越依赖于其处理和分析数据的能力。为了实现这一目标&#xff0c;企业需要将各种异构的应用和数据源集成在一起&#xff0c;形成一个统一的数据视图。在这一过程中&#xff0c;ETL&#xff08;Extract, Transform, Load&#xff09;和iPa…

以太网实战AD采集上传上位机——FPGA学习笔记27

一、设计目标 使用FPGA实现AD模块驱动采集模拟电压&#xff0c;通过以太网上传到电脑上位机。 二、框架设计 数据位宽转换模块&#xff08;ad_10bit_to_16bit&#xff09;&#xff1a;为了方便数据传输&#xff0c;数据位宽转换模块实现了将十位的 AD 数据转换成十六位&#…

YOLOv1、YOLOv2、YOLOv3目标检测算法原理与实战第十三天|YOLOv3实战、安装Typora

1.学习哔哩哔哩《YOLOv1、YOLOv2、YOLOv3目标检测算法原理与实战》 炮哥带你学视频链接 第5章 YOLOv3实战 5.1 YOLOv3实战先导 5.2 pycharm与anaconda的安装 之前已经安装过了&#xff0c;见Pytorch框架与经典卷积神经网络与实战第一天|安装PyCharm&Anaconda&#xff0…

数据库SQLite和SCADA DIAView应用教程

课程简介 此系列课程大纲主要包含七个课时。主要使用到的开发工具有&#xff1a;SQLite studio 和 SCADA DIAView。详细的可成内容大概如下&#xff1a; 1、SQLite 可视化管理工具SQLite Studio &#xff1a;打开数据库和查询数据&#xff1b;查看视频 2、创建6个变量&#x…

YOLOv8改进,YOLOv8检测头融合DSConv(动态蛇形卷积),并添加小目标检测层(四头检测),适合目标检测、分割等

精确分割拓扑管状结构例如血管和道路,对各个领域至关重要,可确保下游任务的准确性和效率。然而,许多因素使任务变得复杂,包括细小脆弱的局部结构和复杂多变的全局形态。在这项工作中,注意到管状结构的特殊特征,并利用这一知识来引导 DSCNet 在三个阶段同时增强感知:特征…

Addressable学习

AssetsBundle是Unity的资源管理机制,将资源打包到AssetsBundle资源包并提供接口能从ab包里面加载资源出来。有了这个机制以后&#xff0c;我们要做资源管理&#xff0c;还需要做: a: 根据项目需求,编写编辑器扩展,提供指定资源打入对应bundle包工具策略; b: 根据项目的需求,资源…

概率密度函数(PDF)分布函数(CDF)——直方图累积直方图——直方图规定化的数学基础

对于连续型随机变量&#xff0c;分布函数&#xff08;Cumulative Distribution Function, CDF&#xff09;是概率密度函数&#xff08;Probability Density Function, PDF&#xff09;的变上限积分&#xff0c;概率密度函数是分布函数的导函数。 如果我们有一个连续型随机变量…

深入解析:Docker 容器如何实现文件系统与资源的多维隔离?

目录 一、RootFs1. Docker 镜像与文件系统层2. RootFs 与容器隔离的意义 二、Linux Namespace1. 进程命名空间1.1 lsns 命令说明1.2 查看“祖先进程”命名空间1.3 查看当前用户进程命名空间 2. 容器进程命名空间2.1 查看容器进程命名空间列表2.2 容器进程命名空间的具体体现 三…