LINQ 按多個字段排序(orderby、thenby、Take)


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); //屬性名的第一個字母 }
 }


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM