LINQ(聚合操作符)

本文介绍了C#中的LINQ聚合操作,包括Count、Sum、Min、Max、Average和Aggregate方法的用法。例如,Count()用于计算元素数量,Sum()求和,Min()和Max()找出最小和最大值,Average()计算平均值,Aggregate()则允许自定义聚合逻辑。通过示例展示了如何在实际查询中应用这些方法。

聚合操作符(如Count、Sum、Min、Max、Average和Aggregate操作符)不返回一个序列,而返回一个值。

Count()扩展方法返回集合中的项数。下面的Count()方法应用于Racer的Years属性,来筛选赛车手,只返回获得冠军次数超过3次的赛车手。因为同一个查询中需要使用同一个计数超过一次,所以使用let子句定义了一个变量numberYears:

        static void AggregateCount()
        {
            var query = from r in Formula1.GetChampions()
                      let numberYears = r.Years.Count()
                      where numberYears >= 3
                      orderby numberYears descending,r.LastName
                      select new {
                          Name = r.FirstName + " " + r.LastName,
                          TimesChampion = numberYears
                      };
            foreach(var r in query)
            {
                System.Console.WriteLine($"{r.Name} {r.TimesChampion}");
            }
        }

结果如下:

Juan Manuel Fangio 5
Jack Brabham 3
Jackie Stewart 3

Sum()方法汇总序列中的所有数字,返回这些数字的和。下面的Sum()方法用于计算一个国家赢得比赛的总次数。首先根据国家对赛车手分组,再在新创建的匿名类型中,把Wins属性赋予某个国家赢得比赛的总次数:

        static void AggregateSum()
        {
            var contries = (from c in
                         from r in Formula1.GetChampions()
                         group r by r.Country into c
                         select new {
                             Country = c.Key,
                             Wins = (from r1 in c
                                  select r1.Wins).Sum()
                         }
                         orderby c.Wins descending,c.Country
                         select c).Take(5);
            foreach(var country in contries)
            {
                System.Console.WriteLine($"{country.Country} {country.Wins}");
            }
        }

根据获得一级方程式冠军的次数,最成功的国家是:

UK 75
Argentina 24
Italy 15
Australia 14
New Zealand 8

方法Min()、Max()、Average()和Aggregate()的使用方式与Count()和Sum()相同。Min()方法返回集合中的最小值,Max()方法返回集合中的最大值,Average()方法计算集合中的平均值。对于Aggregate()方法,可以传递一个lambda表达式,该表达式对所有的值进行聚合。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值