ThenBy和ThenByDescending扩展方法用于对多个字段排序。
OrderBy ()方法根据指定的字段按升序对集合进行排序。在 OrderBy 之后使用 ThenBy ()方法按升序对另一个字段上的集合进行排序。Linq 首先根据 OrderBy 方法指定的主字段对集合进行排序,然后根据 ThenBy 方法指定的辅助字段按升序再次对结果集合进行排序。
以相同的方式,使用ThenByDescending方法以降序应用二次排序。
下面的示例演示如何使用ThenBy和ThenByDescending方法进行第二级排序:
IList<Student> studentList = new List<Student>() { new Student() { StudentID = 1, StudentName = "John", Age = 18 } , new Student() { StudentID = 2, StudentName = "Steve", Age = 15 } , new Student() { StudentID = 3, StudentName = "Bill", Age = 25 } , new Student() { StudentID = 4, StudentName = "Ram" , Age = 20 } , new Student() { StudentID = 5, StudentName = "Ron" , Age = 19 }, new Student() { StudentID = 6, StudentName = "Ram" , Age = 18 } }; var thenByResult = studentList.OrderBy(s => s.StudentName).ThenBy(s => s.Age); var thenByDescResult = studentList.OrderBy(s => s.StudentName).ThenByDescending(s => s.Age);
如您在上面的示例中所见,我们首先按排序studentList集合StudentName,然后按排序Age。因此,现在,thenByResult排序后将包含以下元素:
StudentName: Bill, Age: 25 StudentName: John, Age: 18 StudentName: Ram, Age: 18 StudentName: Ram, Age: 20 StudentName: Ron, Age: 19 StudentName: Steve, Age: 15
现在 bydescresult 将包含以下元素。请注意,年龄为20岁的 Ram 比年龄为18岁的 Ram 更早出现,因为它使用了 ThenByDescending 。
StudentName: Bill, Age: 25 StudentName: John, Age: 18 StudentName: Ram, Age: 20 StudentName: Ram, Age: 18 StudentName: Ron, Age: 19 StudentName: Steve, Age: 15
您可以在VB.Net中以相同的方式使用ThenBy和ThenByDescending方法,如下所示:
Dim sortedResult = studentList.OrderBy(Function(s) s.StudentName) .ThenBy(Function(s) s.Age) Dim sortedResult = studentList.OrderBy(Function(s) s.StudentName) .ThenByDescending(Function(s) s.Age)
默认情况下,OrderBy和ThenBy对集合进行升序排序。
thenBy或ThenByDescending用于方法语法中的第二级排序。
thenByDescending方法在另一个字段上按降序对集合进行排序。
ThenBy或ThenByDescending在查询语法中不适用。
通过使用逗号分隔字段,在查询语法中应用二级排序。
接下来了解有关分组运算符的信息。