.NET 6新特性试用 | LINQ功能改进

Posted dotNET跨平台

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了.NET 6新特性试用 | LINQ功能改进相关的知识,希望对你有一定的参考价值。

前言

.NET6为LINQ添加了多个新API,在本文中,我们将始终使用User类逐一演示这些添加到LINQ中的内容:

public class User

    public string Name  get; set; 
    public int Age  get; set; 

*By方法

包括下列方法:

  • DistinctBy: 根据指定的键选择器从集合返回不同元素的集合

  • ExceptBy: 根据指定的键选择器生成两个集合的集合差集

  • IntersectBy: 根据指定的键选择器函数生成两个集合的集合交集

  • UnionBy: 根据指定的键选择器生成两个集合的集合并集

  • MinBy: 根据指定的键选择器函数返回集合中的最小值

  • MaxBy: 根据指定的键选择器函数返回集合中的最大值

相对于不带By的方法,提供了一个键选择器keySelector,允许对值的子集而不是整个值执行操作。

例如,取Name最长的User:

var user = users.MaxBy(p => p.Name.Length);

Chunk

将集合按照提供的大小分为多个集合。也就是说,返回集合的集合。

例如,将用户按10人分组:

var chunks = users.Chunk(size: 10);
foreach (var chunk in chunks)

    foreach(var user in chunk)
    
        Console.WriteLine(user);    
    

范围和索引支持

范围(..)和索引(^)用于访问集合中的单个元素或范围。

现在可以对ElementAt方法使用索引重载,对Take方法使用范围重载。

示例代码如下:

var lastUser = users.ElementAt(^1);//取最后一个User

var users1To4 = users.Take(1..5);//取索引1到4的User

*OrDefault defaultValue参数

FirstOrDefault, LastOrDefaultSingleOrDefault方法当未找到集合元素时将返回default(T)。

但在某些场合是不合适的。比如需要始终返回一个User实例,避免空引用,这时可以传递defaultValue参数进行指定:

static readonly User EmptyUser = new User  Name = "" ;
        
var user = users.FirstOrDefault(p=>p.Age>30,  EmptyUser);
Console.WriteLine(user.Name);

结论

虽然这些改进都很小,没有从根本上改变使用LINQ的方式,但每一项确实都能帮助解决实际项目中的需要。

如果你觉得这篇文章对你有所启发,请关注我的个人公众号”My IO“

以上是关于.NET 6新特性试用 | LINQ功能改进的主要内容,如果未能解决你的问题,请参考以下文章

.NET 6新特性试用 | 总结:我最喜欢的5个特性

.NET 6新特性试用 | 可空引用类型

.NET 6新特性试用 | 热重载

.NET 6新特性试用 | 自动生成高性能日志记录代码

.NET 6新特性试用 | 常量内插字符串

.NET 6新特性试用 | 文件范围的命名空间