C# 序列排序

要对序列排序,前面使用了orderby 子句。这里使用 orderby descending 子句。其中赛车手按照赢得比赛的次数进行降序排序,赢得比赛的次数用关键字选择器指定:.

static void SortDescending(){  var racers = from r in Formulal.GetChampions()             where r.Country == "Brazil"              orderby r.Wins descending              select r;  //...}orderby 子句解析为 OrderBy() 方法, orderby descending 子句解析为 OrderByDescending()方法:static void SortDescendingWithMethods(){  var racers = Formulal.GetChampions()    .Where(r => r.Country == "Brazil")    .OrderByDescending(r => r.Wins)     .Select(r => r);  //..}
OrderBy()和 OrderByDescending()方法返回 IOrderEnumerable<TSource>。这个接口派生自IEnumerable<TSource>接口,但包含一个额外的方法CreateOrderedEnumerable<TSource>()。这个方法用于进一步给序列排序。如果根据关键字选择器来排序,其中有两项相同,就可以使用ThenBy()和ThenByDescending ()方法继续排序。这两个方法需要 IOrderEnumerable<TSource>接口才能工作,但也返回这个接口。所以,可以添加任意多个 ThenBy()和 ThenByDescending()方法,对集合排序。

使用 LINQ 查询时,只需要把所有用于排序的不同关键字(用逗号分隔开)添加到 orderby 子句中。在下例中,所有的赛车手先按照国家排序,再按照姓氏排序,最后按照名字排序。添加到 LINQ 查询结果中的 Take() 扩展方法用于返回前 10 个结果:

static void SortMultiple(){  var racers = (fromr in Formulal.GetChampions()              orderby r.Country, r.LastName, r.FirstName               select r).Take(10);  //...}