欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 教育 > 高考 > LINQ 和 LINQ 扩展方法(2)

LINQ 和 LINQ 扩展方法(2)

2025/5/14 21:06:11 来源:https://blog.csdn.net/2401_84642440/article/details/142151015  浏览:    关键词: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 只能获取匹配的第一个元素。
  • 代码片段展示了如何使用这两种方法来连接数据集合,并创建包含连接信息的新对象。

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词