LINQ(排序)

本文详细介绍了C#中使用LINQ进行排序的方法,包括OrderBy()和OrderByDescending(),以及如何处理排序关键字相同的项。通过示例展示了如何进行多级排序,并解释了IOrderEnumerable接口的作用。最后,通过一个查询示例说明了如何按照多个条件综合排序并限制返回结果的数量。
摘要由CSDN通过智能技术生成

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

        static void SortDescending()
        {
            var racers  = from r in Formula1.GetChampions()
                        where r.Country == "Italy"
                        orderby r.Wins descending
                        select r.FirstName;
            foreach(var r in racers)
            {
                System.Console.WriteLine(r);
            }
        }

输出如下:

Alberto
Nino

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

            var racers = Formula1.GetChampions()
                       .Where(r=>r.Country == "Italy")
                       .OrderByDescending(r=>r.Wins)
                       .Select(r=>r.FirstName);

OrderBy()和OrderByDescending()方法返回IOrderEnumerable<TSource>。这个接口派生自IEnumerable<TSource>接口,但包含一个额外的方法CreateOrderedEnumerable<TSource>()。这个方法用于进一步给序列排序。如果根据关键字选择器来排序,其中有两项相同,就可以使用ThenBy()和ThenDescending()方法继续排序。这两个方法需要IOrderEnumerable<TSource>接口才能工作,但也返回这个接口。所以,可以添加任意多个ThenBy()和TheDescending()方法,对集合排序。

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

        static void SortMultiple()
        {
            var racers = (from r in Formula1.GetChampions()
                       orderby r.Country,r.LastName,r.FirstName
                       select r).Take(10);
            foreach(var r in racers)
            {
                System.Console.WriteLine($"{r:A}");
            }
        }

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

            var racers = Formula1.GetChampions()
                       .OrderBy(r=>r.Country)
                       .ThenBy(r=>r.LastName)
                       .ThenBy(r=>r.FirstName)
                       .Take(10);

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值