Linq学习笔记之排序

要对序列排序,使用orderby子句和orderby descending子句

下面的代码按照赢得比赛的次数进行降序排序:

var racers = from r in Formula.GetChampions() where r.Country == "Brazil" orderby r.Wins descending select r;

orderby子句解析为OrderBy()方法,orderby descending子句解析为OrderByDescending()方法;

所以上面的代码也可以写为:

var racers =

                Formula.GetChampions().Where(r => r.Country == "Brazil").OrderByDescending(r => r.Wins).Select(r => r);
OrderByDescending()和 OrderBy()方法返回IOrderedEnumerable<TSource>,这个接口派生自IEnumerable<TSource>接口,但包含一个额外的方法CreateOrderedEnumerable
<TSource>,这个方法用于进一步给序列排序。

如果根据关键字选择器来排序,其中有两项相同,就可以使用ThenBy()和ThenByDescending()方法继续排序,这两个方法需要IOrderedEnumerable
<TSource>接口才能工作,但也返回这个接口,所以,可以添加任意多个ThenBy()和ThenByDescending()方法,对集合排序。

使用Linq查询时,只需把所有用于排序的不同关键字(用逗号分隔开)添加到orderby子句中。
如下例,所有的赛手先按照国家排序,再按照姓氏排序,最后按照名字排序,最后用Take()扩展方法用于提取前10个结果:
var racers = (from r in Formula.GetChampions() orderby r.Country, r.LastName, r.FirstName select r).Take(10);

使用OrderBy()和ThenBy()方法可以执行相同的操作:

var racers =

                Formula.GetChampions().OrderBy(r => r.Country).ThenBy(r => r.LastName).ThenBy(r => r.FirstName).Take(10);

 





                            

你可能感兴趣的:(LINQ)