orderby 子句解析為 OrderBy()方法,orderby descending 子句解析為OrderBy Descending()方法: var racers = Formula1.GetChampions(). Where(r = > r.Country == "Brazil"). OrderByDescending(r = > r.Wins). Select(r = > r);
OrderBy() 和 OrderByDescending ()方法返回 IOrderEnumerable。這個接口派生於接口 IEnumerable,但包含一個額外的方法CreateOrderedEnumerable- ()。 這個方法用於進一步給序列排序。
如果根據關鍵字選擇器來排序,兩項的順序相同,就可以使用 ThenBy()和 ThenByDescending ()方法繼續排序。
這兩個方法需要 IOrderEnumerable才能工作,但也返回這個接口。
所以,可以添加任意多個 ThenBy()和 ThenByDescending ()方法,對集合排序。
使用 LINQ 查詢時,只需把所有用於排序的不同關鍵字(用逗號分隔開)添加到orderby 子句中。
這里, 所有的賽手先按照國家排序,再按照姓氏排序,最后按照名字排序。
添加到 LINQ 查詢結果中的Take()擴展方法用於提取前 10 個結果:
private static void Ordering() { var racers = (from r in Formula1.GetChampions() orderby r.Country, r.LastName, r.FirstName select r).Take(10); foreach (var racer in racers) { Console.WriteLine("{0:C}: {0:L}, {0:F}", racer); //屬性名的第一個字母 } }
Lambda表達式 使用OrderBy()和 ThenBy()方法可以執行相同的操作:
private static void Ordering() {
var racers = Formula1.GetChampions(). OrderBy(r => r.Country). ThenBy(r => r.LastName). ThenBy(r => r.FirstName). Take(10);
foreach (var racer in racers) { Console.WriteLine("{0:C}: {0:L}, {0:F}", racer); //屬性名的第一個字母 }
}