聚合操作符(如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表达式,该表达式对所有的值进行聚合。
本文介绍了C#中的LINQ聚合操作,包括Count、Sum、Min、Max、Average和Aggregate方法的用法。例如,Count()用于计算元素数量,Sum()求和,Min()和Max()找出最小和最大值,Average()计算平均值,Aggregate()则允许自定义聚合逻辑。通过示例展示了如何在实际查询中应用这些方法。
147

被折叠的 条评论
为什么被折叠?



