当前位置:首页 > C# > 正文

C# LINQ Join多集合查询详解(LINQ关联查询教程,小白也能轻松掌握)

在C#开发中,LINQ(Language Integrated Query) 是一个强大的数据查询工具,尤其在处理集合数据时非常高效。其中,Join 操作允许我们将多个集合(如列表、数组或数据库表)进行关联查询,类似于SQL中的 INNER JOIN。本文将围绕 C# LINQ Join多集合查询 这一主题,手把手教你如何使用 LINQ 实现多集合的关联操作,即使是编程新手也能轻松上手。

C# LINQ Join多集合查询详解(LINQ关联查询教程,小白也能轻松掌握) Join多集合查询  LINQ关联查询教程 C#多表连接查询 LINQ小白入门 第1张

什么是 LINQ Join?

LINQ 的 Join 方法用于根据两个集合中元素的“键”进行匹配,从而将它们组合成一个新的结果集。这在处理来自不同数据源但存在逻辑关联的数据时非常有用。

例如:你有一个学生列表和一个成绩列表,你想知道每个学生的姓名和对应的成绩,这时就可以使用 Join 将两个列表通过“学号”关联起来。

基本语法

LINQ Join 的基本语法如下:

var result = from a in collectionA             join b in collectionB on a.Key equals b.Key             select new { a.Property1, b.Property2 };

或者使用方法语法:

var result = collectionA.Join(    collectionB,    a => a.Key,        // 外部集合的键选择器    b => b.Key,        // 内部集合的键选择器    (a, b) => new { a.Property1, b.Property2 } // 结果选择器);

实战示例:学生与成绩关联查询

我们来创建两个类:StudentScore,然后用 LINQ Join 把它们关联起来。

public class Student{    public int Id { get; set; }    public string Name { get; set; }}public class Score{    public int StudentId { get; set; }    public double MathScore { get; set; }}

接下来,准备测试数据:

var students = new List<Student>{    new Student { Id = 1, Name = "张三" },    new Student { Id = 2, Name = "李四" },    new Student { Id = 3, Name = "王五" }};var scores = new List<Score>{    new Score { StudentId = 1, MathScore = 95 },    new Score { StudentId = 2, MathScore = 88 },    new Score { StudentId = 4, MathScore = 92 } // 注意:Id=4 的学生不存在};

现在使用 LINQ Join 查询:

var query = from s in students            join sc in scores on s.Id equals sc.StudentId            select new            {                s.Name,                sc.MathScore            };// 或者使用方法语法:// var query = students.Join(scores,//     student => student.Id,//     score => score.StudentId,//     (student, score) => new { student.Name, score.MathScore });foreach (var item in query){    Console.WriteLine($"{item.Name}: {item.MathScore}");}

输出结果为:

张三: 95李四: 88

注意:王五没有成绩记录,而成绩表中的 StudentId=4 在学生表中不存在,因此这两条数据都不会出现在结果中——这就是典型的 内连接(Inner Join) 行为。

扩展:GroupJoin 实现左外连接

如果你希望保留所有学生(即使没有成绩),可以使用 GroupJoin 配合 SelectMany 来实现左外连接(Left Outer Join):

var leftJoin = from s in students               join sc in scores on s.Id equals sc.StudentId into scoreGroup               from sg in scoreGroup.DefaultIfEmpty()               select new               {                   s.Name,                   MathScore = sg?.MathScore ?? 0 // 使用空合并运算符               };foreach (var item in leftJoin){    Console.WriteLine($"{item.Name}: {item.MathScore}");}

输出结果:

张三: 95李四: 88王五: 0

总结

通过本教程,你已经掌握了 C# LINQ Join多集合查询 的基本用法。无论是使用查询表达式还是方法语法,LINQ 都能让你以声明式的方式优雅地处理多集合关联。

记住以下几点:

  • Join 默认是内连接,只返回匹配成功的项。
  • 要实现左外连接,需结合 GroupJoinDefaultIfEmpty()
  • LINQ 支持链式操作,可与其他方法(如 WhereOrderBy)组合使用。

希望这篇 LINQ关联查询教程 能帮助你快速上手 C# 中的多集合查询。如果你正在学习 C#多表连接查询LINQ小白入门,不妨动手实践一下上面的代码!