C# LINQ 排序
LINQ(Language Integrated Query)是 C# 中用于查询和操作数据的强大工具。排序是数据处理中的常见需求,LINQ 提供了多种方法来实现排序。本文将详细介绍如何使用 LINQ 对数据进行排序,并通过实际案例帮助你理解其应用。
什么是 LINQ 排序?
LINQ 排序是指使用 LINQ 查询表达式或方法语法对集合中的元素进行排序。排序可以基于一个或多个属性,并且可以指定升序或降序排列。
基本排序方法
使用 OrderBy
进行升序排序
OrderBy
是 LINQ 中最常用的排序方法之一,用于对集合中的元素进行升序排序。
csharp
var numbers = new List<int> { 5, 3, 9, 1, 7 };
var sortedNumbers = numbers.OrderBy(n => n);
foreach (var number in sortedNumbers)
{
Console.WriteLine(number);
}
输出:
1
3
5
7
9
使用 OrderByDescending
进行降序排序
OrderByDescending
方法与 OrderBy
类似,但它会按降序排列元素。
csharp
var numbers = new List<int> { 5, 3, 9, 1, 7 };
var sortedNumbers = numbers.OrderByDescending(n => n);
foreach (var number in sortedNumbers)
{
Console.WriteLine(number);
}
输出:
9
7
5
3
1
多条件排序
在实际应用中,我们经常需要根据多个条件对数据进行排序。LINQ 提供了 ThenBy
和 ThenByDescending
方法来实现多条件排序。
使用 ThenBy
进行多条件升序排序
csharp
var students = new List<Student>
{
new Student { Name = "Alice", Age = 20 },
new Student { Name = "Bob", Age = 22 },
new Student { Name = "Charlie", Age = 20 }
};
var sortedStudents = students.OrderBy(s => s.Age).ThenBy(s => s.Name);
foreach (var student in sortedStudents)
{
Console.WriteLine($"{student.Name} - {student.Age}");
}
输出:
Alice - 20
Charlie - 20
Bob - 22
使用 ThenByDescending
进行多条件降序排序
csharp
var students = new List<Student>
{
new Student { Name = "Alice", Age = 20 },
new Student { Name = "Bob", Age = 22 },
new Student { Name = "Charlie", Age = 20 }
};
var sortedStudents = students.OrderByDescending(s => s.Age).ThenByDescending(s => s.Name);
foreach (var student in sortedStudents)
{
Console.WriteLine($"{student.Name} - {student.Age}");
}
输出:
Bob - 22
Charlie - 20
Alice - 20
实际案例:按多个属性排序
假设我们有一个员工列表,每个员工有姓名、部门和工资三个属性。我们需要按部门升序排列,然后在同一部门内按工资降序排列。
csharp
var employees = new List<Employee>
{
new Employee { Name = "John", Department = "HR", Salary = 50000 },
new Employee { Name = "Jane", Department = "IT", Salary = 60000 },
new Employee { Name = "Doe", Department = "HR", Salary = 55000 }
};
var sortedEmployees = employees.OrderBy(e => e.Department).ThenByDescending(e => e.Salary);
foreach (var employee in sortedEmployees)
{
Console.WriteLine($"{employee.Name} - {employee.Department} - {employee.Salary}");
}
输出:
Doe - HR - 55000
John - HR - 50000
Jane - IT - 60000
总结
LINQ 提供了强大的排序功能,可以轻松地对集合中的元素进行升序或降序排列。通过 OrderBy
、OrderByDescending
、ThenBy
和 ThenByDescending
方法,我们可以实现单条件和多条件的排序。这些方法在实际开发中非常有用,尤其是在处理复杂数据时。
附加资源与练习
- 练习 1:创建一个包含学生姓名、年龄和成绩的列表,并按成绩降序排列。
- 练习 2:创建一个包含产品名称、类别和价格的列表,并按类别升序排列,然后在同一类别内按价格降序排列。
提示
建议你尝试在实际项目中应用这些排序方法,以加深对 LINQ 排序的理解。