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

时间:2021-04-16

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

声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。

相关文章