排序運(yùn)算符以升序或降序排列集合的元素。LINQ包括以下排序運(yùn)算符。
| 運(yùn)算符 | 描述 |
|---|---|
| OrderBy | 根據(jù)指定的字段按升序或降序?qū)现械脑剡M(jìn)行排序。 |
| OrderByDescending | 根據(jù)指定的字段按降序?qū)线M(jìn)行排序。僅在方法語(yǔ)法中有效。 |
| ThenBy | 僅在方法語(yǔ)法中有效。用于按升序進(jìn)行二次排序。 |
| ThenByDescending | 僅在方法語(yǔ)法中有效。用于按降序進(jìn)行二次排序。 |
| Reverse | 僅在方法語(yǔ)法中有效。按相反順序?qū)吓判颉?/p> |
orderderby按升序或降序?qū)系闹颠M(jìn)行排序。默認(rèn)情況下,它按升序?qū)线M(jìn)行排序,因?yàn)閍scending關(guān)鍵字在這里是可選的。使用降序關(guān)鍵字對(duì)集合進(jìn)行降序排序。
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 }
};
var orderByResult = from s in studentList
orderby s.StudentName
select s;
var orderByDescendingResult = from s in studentList
orderby s.StudentName descending
select s;Dim orderByResult = From s In studentList Order By s.StudentName Select s Dim orderByDescendingResult = From s In studentList Order By s.StudentName Descending Select s
上例中的orderByResult在執(zhí)行后將包含以下元素:
Bill John Ram Ron Steve
上例中的orderByDescendingResult在執(zhí)行后將包含以下元素:
Steve Ron Ram John Bill
OrderBy擴(kuò)展方法有兩個(gè)重載。OrderBy擴(kuò)展方法的第一個(gè)重載接受Func委托類型參數(shù)。因此,您需要為要對(duì)集合進(jìn)行排序的字段傳遞lambda表達(dá)式。
OrderBy的第二個(gè)重載方法接受IComparer的對(duì)象以及Func委托類型,以使用自定義比較進(jìn)行排序。
public static IOrderedEnumerable<TSource> OrderBy<TSource, TKey>(this IEnumerable<TSource> source, Func<TSource, TKey> keySelector); public static IOrderedEnumerable<TSource> OrderBy<TSource, TKey>(this IEnumerable<TSource> source, Func<TSource, TKey> keySelector, IComparer<TKey> comparer);
以下示例使用OrderBy擴(kuò)展方法按StudentName的升序?qū)tudentList集合進(jìn)行排序。
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 }
};
var studentsInAscOrder = studentList.OrderBy(s => s.StudentName);Dim studentsInAscOrder = studentList.OrderBy(Function(s) s.StudentName)
方法語(yǔ)法不允許decending關(guān)鍵字對(duì)集合進(jìn)行降序排序。使用OrderByDecending()方法。
OrderByDescending以降序?qū)线M(jìn)行排序。
OrderByDescending僅對(duì)方法語(yǔ)法有效。它在查詢語(yǔ)法中無(wú)效,因?yàn)椴樵冋Z(yǔ)法使用升序和降序?qū)傩?,如上所示?/p>
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 }
};
var studentsInDescOrder = studentList.OrderByDescending(s => s.StudentName);Dim studentsInDescOrder = studentList.OrderByDescending(Function(s) s.StudentName)
上面示例中的結(jié)果在執(zhí)行后將包含以下元素。
Steve Ron Ram John Bill
請(qǐng)注意,查詢語(yǔ)法不支持OrderByDescending。請(qǐng)改用decending關(guān)鍵字。
您可以在用逗號(hào)分隔的多個(gè)字段上對(duì)集合進(jìn)行排序。給定的集合將首先基于第一個(gè)字段進(jìn)行排序,然后如果兩個(gè)元素的第一個(gè)字段的值相同,則將使用第二個(gè)字段進(jìn)行排序,依此類推。
示例:查詢語(yǔ)法C#中的多重排序
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 orderByResult = from s in studentList
orderby s.StudentName, s.Age
select new { s.StudentName, s.Age };在上面的示例中,studentList集合包括兩個(gè)相同的StudentName,Ram。因此,現(xiàn)在,studentList將首先基于StudentName進(jìn)行排序,然后根據(jù)年齡進(jìn)行升序排列。因此,執(zhí)行后orderByResult將包含以下元素
StudentName: Bill, Age: 25 StudentName: John, Age: 18 StudentName: Ram, Age: 18 StudentName: Ram, Age: 20 StudentName: Ron, Age: 19 StudentName: Steve, Age: 15
方法語(yǔ)法中的多重排序的工作方式不同。使用ThenBy或ThenByDecenting擴(kuò)展方法進(jìn)行二次排序。
LINQ包括五個(gè)排序運(yùn)算符:OrderBy,OrderByDescending,ThenBy,ThenByDescending和Reverse
LINQ 查詢語(yǔ)法不支持 OrderByDescending,ThenBy,ThenByDescending 和 Reverse。它只支持“ Order By”子句的“ ascending”和“ descending”排序方向。
LINQ查詢語(yǔ)法支持多個(gè)以逗號(hào)分隔的排序字段,而您必須使用ThenBy和ThenByDescending方法進(jìn)行二次排序。