.NET 9 - 尝试一下LINQ新增加的方法AggregateBy,CountBy,Index

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新特性

如果哪里有错误的地方,麻烦告之,谢谢谢谢!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值