跳到主要内容

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 提供了 ThenByThenByDescending 方法来实现多条件排序。

使用 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 提供了强大的排序功能,可以轻松地对集合中的元素进行升序或降序排列。通过 OrderByOrderByDescendingThenByThenByDescending 方法,我们可以实现单条件和多条件的排序。这些方法在实际开发中非常有用,尤其是在处理复杂数据时。

附加资源与练习

  • 练习 1:创建一个包含学生姓名、年龄和成绩的列表,并按成绩降序排列。
  • 练习 2:创建一个包含产品名称、类别和价格的列表,并按类别升序排列,然后在同一类别内按价格降序排列。
提示

建议你尝试在实际项目中应用这些排序方法,以加深对 LINQ 排序的理解。