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. OrderBy
和 OrderByDescending
操作符
OrderBy
和 OrderByDescending
操作符用于对集合中的元素进行排序。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 操作符及其使用方法。在实际开发中,灵活运用这些操作符可以大大提高代码的可读性和效率。
附加资源
练习
- 使用
Where
和Select
操作符从一个整数列表中筛选出所有偶数并计算它们的平方。 - 使用
GroupBy
操作符将一个字符串列表按字符串长度分组,并输出每个分组的元素。 - 使用
Join
操作符将两个包含学生和课程信息的列表连接起来,并输出每个学生的课程信息。
提示
在练习中,尝试使用不同的 LINQ 操作符组合来解决实际问题,这将帮助你更好地理解它们的用法。