跳到主要内容

C# LINQ 基础

介绍

LINQ(Language Integrated Query)是 C# 中用于查询和操作数据的强大工具。它允许你使用类似 SQL 的语法来查询集合、数据库、XML 等数据源。LINQ 的主要优势在于它提供了一种统一的查询语法,使得代码更加简洁、易读。

在本教程中,我们将从基础开始,逐步介绍 LINQ 的核心概念,并通过实际案例展示如何使用 LINQ 来解决常见的编程问题。

LINQ 的基本概念

1. LINQ 查询语法

LINQ 提供了两种查询语法:查询表达式语法方法语法。查询表达式语法类似于 SQL,而方法语法则使用扩展方法。

查询表达式语法

csharp
var numbers = new List<int> { 1, 2, 3, 4, 5 };
var evenNumbers = from num in numbers
where num % 2 == 0
select num;

foreach (var num in evenNumbers)
{
Console.WriteLine(num);
}

输出:

2
4

方法语法

csharp
var numbers = new List<int> { 1, 2, 3, 4, 5 };
var evenNumbers = numbers.Where(num => num % 2 == 0);

foreach (var num in evenNumbers)
{
Console.WriteLine(num);
}

输出:

2
4
备注

查询表达式语法和方法语法在功能上是等价的,选择哪种语法取决于个人偏好和代码的可读性。

2. LINQ 的延迟执行

LINQ 查询是延迟执行的,这意味着查询不会立即执行,而是在你实际访问查询结果时才会执行。这种特性可以提高性能,尤其是在处理大数据集时。

csharp
var numbers = new List<int> { 1, 2, 3, 4, 5 };
var evenNumbers = numbers.Where(num => num % 2 == 0);

numbers.Add(6); // 添加一个新元素

foreach (var num in evenNumbers)
{
Console.WriteLine(num);
}

输出:

2
4
6
提示

延迟执行意味着你可以在查询定义之后修改数据源,查询结果会反映这些修改。

3. LINQ 的常用操作符

LINQ 提供了丰富的操作符来查询和操作数据。以下是一些常用的操作符:

  • Where: 过滤数据
  • Select: 投影数据
  • OrderBy: 排序数据
  • GroupBy: 分组数据
  • Join: 连接数据

示例:使用 OrderBySelect

csharp
var numbers = new List<int> { 5, 3, 1, 4, 2 };
var sortedNumbers = numbers.OrderBy(num => num).Select(num => num * 2);

foreach (var num in sortedNumbers)
{
Console.WriteLine(num);
}

输出:

2
4
6
8
10

实际案例:学生成绩查询

假设我们有一个学生列表,每个学生有姓名和成绩。我们想要查询成绩大于 80 分的学生,并按成绩降序排列。

csharp
var students = new List<Student>
{
new Student { Name = "Alice", Score = 85 },
new Student { Name = "Bob", Score = 75 },
new Student { Name = "Charlie", Score = 90 },
new Student { Name = "David", Score = 80 }
};

var highScorers = students.Where(s => s.Score > 80)
.OrderByDescending(s => s.Score);

foreach (var student in highScorers)
{
Console.WriteLine($"{student.Name}: {student.Score}");
}

输出:

Charlie: 90
Alice: 85
警告

在实际应用中,确保数据源的类型和查询条件匹配,以避免运行时错误。

总结

LINQ 是 C# 中一个强大的工具,它简化了数据查询和操作的过程。通过本教程,你已经学习了 LINQ 的基本概念、查询语法、延迟执行以及常用操作符。我们还通过一个实际案例展示了如何使用 LINQ 来解决实际问题。

附加资源与练习

  • 练习: 尝试使用 LINQ 查询一个包含多个属性的对象列表,并练习使用 GroupByJoin 操作符。
  • 资源: 查阅 Microsoft 官方文档 以获取更多关于 LINQ 的详细信息。

通过不断练习和探索,你将能够熟练使用 LINQ 来处理各种数据查询任务。祝你学习愉快!