跳到主要内容

C# LINQ 操作符

介绍

LINQ(Language Integrated Query)是 C# 中用于查询数据的强大工具。它允许开发者使用类似 SQL 的语法来查询集合、数据库、XML 等数据源。LINQ 操作符是 LINQ 查询的核心组成部分,它们用于对数据进行筛选、排序、分组、投影等操作。

本文将详细介绍常见的 LINQ 操作符,并通过代码示例和实际案例帮助你理解它们的用法。

常见的 LINQ 操作符

1. Where 操作符

Where 操作符用于筛选集合中满足特定条件的元素。它类似于 SQL 中的 WHERE 子句。

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

// 输出: [2, 4, 6]
foreach (var num in evenNumbers)
{
Console.WriteLine(num);
}

2. Select 操作符

Select 操作符用于将集合中的每个元素投影到一个新的形式。它类似于 SQL 中的 SELECT 子句。

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

// 输出: [1, 4, 9, 16, 25]
foreach (var num in squaredNumbers)
{
Console.WriteLine(num);
}

3. OrderByOrderByDescending 操作符

OrderByOrderByDescending 操作符用于对集合中的元素进行排序。OrderBy 按升序排序,而 OrderByDescending 按降序排序。

csharp
var numbers = new List<int> { 3, 1, 4, 1, 5, 9 };
var sortedNumbers = numbers.OrderBy(n => n);

// 输出: [1, 1, 3, 4, 5, 9]
foreach (var num in sortedNumbers)
{
Console.WriteLine(num);
}

4. GroupBy 操作符

GroupBy 操作符用于将集合中的元素按指定的键进行分组。它类似于 SQL 中的 GROUP BY 子句。

csharp
var words = new List<string> { "apple", "banana", "cherry", "date" };
var groupedWords = words.GroupBy(w => w.Length);

foreach (var group in groupedWords)
{
Console.WriteLine($"Words with length {group.Key}:");
foreach (var word in group)
{
Console.WriteLine(word);
}
}

5. Join 操作符

Join 操作符用于将两个集合中的元素根据指定的键进行连接。它类似于 SQL 中的 JOIN 操作。

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

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

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

foreach (var sc in studentCourses)
{
Console.WriteLine($"{sc.Name} is enrolled in {sc.CourseName}");
}

6. Aggregate 操作符

Aggregate 操作符用于对集合中的元素进行累积操作。它可以用于计算总和、乘积等。

csharp
var numbers = new List<int> { 1, 2, 3, 4, 5 };
var sum = numbers.Aggregate((acc, n) => acc + n);

// 输出: 15
Console.WriteLine(sum);

实际案例

假设你正在开发一个学生管理系统,你需要从学生列表中筛选出成绩大于 80 分的学生,并按成绩降序排列。

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

var topStudents = students
.Where(s => s.Grade > 80)
.OrderByDescending(s => s.Grade);

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

总结

LINQ 操作符是 C# 中处理集合数据的强大工具。通过本文的介绍,你应该已经掌握了常见的 LINQ 操作符及其使用方法。在实际开发中,灵活运用这些操作符可以大大提高代码的可读性和效率。

附加资源

练习

  1. 使用 WhereSelect 操作符从一个整数列表中筛选出所有偶数并计算它们的平方。
  2. 使用 GroupBy 操作符将一个字符串列表按字符串长度分组,并输出每个分组的元素。
  3. 使用 Join 操作符将两个包含学生和课程信息的列表连接起来,并输出每个学生的课程信息。
提示

在练习中,尝试使用不同的 LINQ 操作符组合来解决实际问题,这将帮助你更好地理解它们的用法。