1.简单介绍
.NET 9 在 System.LINQ中增加了三个方法,分别是 AggregateBy,CountBy,Index
这边也简单尝试一下.NET 9 LINQ中新增加的这三个方法
.NET9关于.NET library有很多新特性的,具体请参考如下链接
What's new in .NET libraries for .NET 9 | Microsoft Learn
2.尝试一下
假定有如下巴黎奥运会奖牌数据存放于数据库SQL Server中
现在打算将这些数据通过Entity Framework Core 9.0 提取出来
2.1 获取各大洲的金牌数量
2.1.1 AggregateBy LINQ语句
如下图第5行开始是AggregateBy
data = dbcontext.CountryDatas
.Where(c => c.Continent != null)
.OrderBy(e => e.No)
.AsEnumerable<CountryData>()
.AggregateBy(
keySelector: entry => entry.Continent,
seed: 0,
(totalMetal, cur) => totalMetal + cur.Gold)
.OrderByDescending(c => c.Value)
.Select(continentData => new ContinentData { ContinentName = continentData.Key, TotalMetal = continentData.Value })
.ToArray<ContinentData>();
AggregateBy可以按某个key进行分组然后进行加总
note: 如果没有AggregateBy方法,可能就需要使用GroupBy方法了
2.1.2 运行一下
发现有数据返回,金牌数最多的是欧洲,美洲包含了北美洲和南美洲
2.2 各大洲拿到金牌的国家数量
2.2.1 CountBy LINQ语句
如下图第5行开始是CountBy
var data = dbcontext.CountryDatas
.Where(c => c.Continent != null && c.Gold > 0)
.Select(c => c.Continent)
.AsEnumerable<string>()
.CountBy(c => c)
.Select(ContinentData => new ContinentData { ContinentName = ContinentData.Key, TotalMetal = ContinentData.Value })
.OrderByDescending(c => c.TotalMetal)
.ToArray<ContinentData>();
CountBy可以按某个key进行分组然后统计每组的数量
note: 如果没有CountBy方法,可能就需要使用GroupBy方法了
2.2.2 运行一下
发现欧洲获得金牌国家数量最多,亚洲第二,美洲第三(美洲包含了北美洲和南美洲)
2.3 Index的使用
2.3.1 使用Index()
上图中标记的变量 continentDataItem是元组类型的,类型是(int Index, ContinentData Item)
note: 之前的enumerable内部的index也是可以使用的,有了Index方法方便了一些
2.3.2 运行一下
发现每行前面有加上了序号
3.总结
本文简单尝试了一下.NET 9 LINQ中新增加的三个方法AggregateBy,CountBy,Index。
.NET9中关于C#13的新特性有很多,具体可以参考ms learn文章 C#13新特性
如果哪里有错误的地方,麻烦告之,谢谢谢谢!