跳到主要内容

C# LINQ 连接

介绍

在 C# 中,LINQ(Language Integrated Query)是一种强大的工具,用于查询和操作数据。LINQ 提供了多种方法来连接数据集合,类似于 SQL 中的 JOIN 操作。通过 LINQ 连接,您可以将两个或多个数据集合中的相关数据组合在一起,从而生成一个新的结果集。

本文将详细介绍如何在 C# 中使用 LINQ 进行连接操作,包括 JoinGroupJoin 方法,并通过实际案例展示其应用场景。

LINQ 连接的基本概念

在 LINQ 中,连接操作通常用于将两个集合中的元素基于某个共同的键进行匹配。最常见的连接操作是内连接(Inner Join)和左外连接(Left Outer Join)。

内连接(Inner Join)

内连接返回两个集合中具有匹配键的元素。如果某个元素在其中一个集合中没有匹配项,则不会出现在结果中。

左外连接(Left Outer Join)

左外连接返回左侧集合中的所有元素,即使它们在右侧集合中没有匹配项。如果右侧集合中没有匹配项,则结果中的对应字段将为空。

LINQ 连接方法

1. Join 方法

Join 方法用于执行内连接操作。它接受四个参数:

  • 要连接的第二个集合。
  • 第一个集合中用于匹配的键选择器。
  • 第二个集合中用于匹配的键选择器。
  • 结果选择器,用于定义如何组合匹配的元素。

示例代码

csharp
var students = new List<Student>
{
new Student { Id = 1, Name = "Alice" },
new Student { Id = 2, Name = "Bob" },
new Student { Id = 3, Name = "Charlie" }
};

var courses = new List<Course>
{
new Course { StudentId = 1, CourseName = "Math" },
new Course { StudentId = 2, CourseName = "Science" },
new Course { StudentId = 4, CourseName = "History" }
};

var result = students.Join(
courses,
student => student.Id,
course => course.StudentId,
(student, course) => new
{
student.Name,
course.CourseName
});

foreach (var item in result)
{
Console.WriteLine($"{item.Name} - {item.CourseName}");
}

输出

Alice - Math
Bob - Science

2. GroupJoin 方法

GroupJoin 方法用于执行左外连接操作。它返回左侧集合中的所有元素,并将右侧集合中的匹配元素分组。

示例代码

csharp
var result = students.GroupJoin(
courses,
student => student.Id,
course => course.StudentId,
(student, courseGroup) => new
{
student.Name,
Courses = courseGroup.Select(course => course.CourseName).ToList()
});

foreach (var item in result)
{
Console.WriteLine($"{item.Name}: {string.Join(", ", item.Courses)}");
}

输出

Alice: Math
Bob: Science
Charlie:

实际应用场景

场景 1:学生选课系统

假设您正在开发一个学生选课系统,您需要查询每个学生所选的课程。使用 Join 方法可以轻松地将学生和课程数据连接起来,生成一个包含学生姓名和课程名称的结果集。

场景 2:员工部门管理系统

在一个员工部门管理系统中,您可能需要查询每个部门的所有员工。使用 GroupJoin 方法可以将部门和员工数据连接起来,生成一个包含部门名称和员工列表的结果集。

总结

通过本文,您已经了解了如何在 C# 中使用 LINQ 进行连接操作。Join 方法用于执行内连接,而 GroupJoin 方法用于执行左外连接。这些方法在处理复杂的数据集合时非常有用,可以帮助您轻松地将相关数据组合在一起。

附加资源与练习

  • 练习 1:尝试使用 Join 方法将两个包含订单和产品信息的集合连接起来,生成一个包含订单号和产品名称的结果集。
  • 练习 2:使用 GroupJoin 方法将部门和员工数据连接起来,生成一个包含部门名称和员工姓名的结果集。

通过不断练习,您将更加熟练地掌握 LINQ 连接操作,并能够在实际项目中灵活运用。