猿教程 Logo

Linq排序运算符:ThenBy & ThenByDescending

我们已经看到了如何在上一节中使用查询语法中的多个字段进行排序。

使用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);

正如你在上面的例子中可以看到的,我们首先按StudentName,然后按Age排序一个studentList集合。 所以现在,SortByResult将包含以下排序后的元素:

运行结果:

StudentName: Bill, Age: 25 
StudentName: John, Age: 18 
StudentName: Ram, Age: 18 
StudentName: Ram, Age: 20 
StudentName: Ron, Age: 19 
StudentName: Steve, Age: 15

thenByDescResult将包含以下元素。 请注意,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

你可以使用ThenBy和ThenByDescending方法同样的方式在VB.Net如下:

相关实例:

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不适用于查询语法。 

通过使用逗号分隔字段来在查询语法中应用二次排序。


版权声明:本站所有教程均为本站原创或翻译,转载请注明出处,请尊重他人劳动果实。请记住本站地址:www.yuanjiaocheng.net (猿教程) 作者:卿文刚
本文标题: C#环境
本文地址:http://www.yuanjiaocheng.net/Linq/linq-sorting-operators-thenby-thenbydescending.html