Sorting Operators: ThenBy & ThenByDescending
The ThenBy
and ThenByDescending
extension methods are used for sorting on multiple fields.
The OrderBy()
method sorts the collection in ascending order based on specified field. Use ThenBy() method after OrderBy to sort the collection on another field in ascending order. Linq will first sort the collection based on primary field which is specified by OrderBy method and then sort the resulted collection in ascending order again based on secondary field specified by ThenBy
method.
The same way, use ThenByDescending method to apply secondary sorting in descending order.
The following example shows how to use ThenBy and ThenByDescending method for second level sorting:
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);
As you can see in the above example, we first sort a studentList
collection by StudentName
and then by Age
. So now, thenByResult
would contain following elements after sorting:
StudentName: John, Age: 18
StudentName: Ram, Age: 18
StudentName: Ram, Age: 20
StudentName: Ron, Age: 19
StudentName: Steve, Age: 15
thenByDescResult would contain following elements. Please notice that Ram with age 20 comes before Ram with age 18 because it has used ThenByDescending.
StudentName: Bill, Age: 25StudentName: John, Age: 18
StudentName: Ram, Age: 20
StudentName: Ram, Age: 18
StudentName: Ron, Age: 19
StudentName: Steve, Age: 15
You can use ThenBy and ThenByDescending method same way in VB.Net as below:
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 and ThenBy sorts collections in ascending order by default.
- ThenBy or ThenByDescending is used for second level sorting in method syntax.
- ThenByDescending method sorts the collection in decending order on another field.
- ThenBy or ThenByDescending is NOT applicable in Query syntax.
- Apply secondary sorting in query syntax by separating fields using comma.
Learn about grouping operators next.