.NET 6 中的 LINQ 更新

.NET 6 中的 LINQ 更新

Intro

在 .NET 6 中会针对 Linq 提供更好的支持,之前可能我们通过自定义扩展方法来实现的功能,现在官方直接支持了。Linq 将更加强大,更好地帮助我们简化应用程序代码。

Better Index & Range support

IndexRange 是在 C# 8.0 开始引入的一个特性,可以帮助我们更好地定位元素的位置或者在原有集合的基础上进行切片操作,.NET 6 会更好地支持 IndexRange 特性以及对 Linq 更好的支持,来看下面的示例:

Enumerable.Range(1, 10).ElementAt(^2).Dump(); // returns 9
Enumerable.Range(1, 10).Take(^2..).Dump(); // returns [9,10]
Enumerable.Range(1, 10).Take(..2).Dump(); // returns [1,2]
Enumerable.Range(1, 10).Take(2..4).Dump(); // returns [3,4]

XxxBy Clause

.NET 6 将引入 XxxBy 来支持按照集合内的元素来进行 Max/Min/Union/Distinct/Intersect/Except 等操作。

// DistinctBy/UnionBy/IntersectBy/ExceptBy
Enumerable.Range(1, 20).DistinctBy(x => x % 3).Dump(); // [1, 2, 3]
var first = new (string Name, int Age)[] { ("Francis", 20), ("Lindsey", 30), ("Ashley", 40) };
var second = new (string Name, int Age)[] { ("Claire", 30), ("Pat", 30), ("Drew", 33) };
first.UnionBy(second, person => person.Age).Select(x=>$"{x.Name}, {x.Age}").Dump(); // { ("Francis", 20), ("Lindsey", 30), ("Ashley", 40), ("Drew", 33) }// MaxBy/MinBy
var people = new (string Name, int Age)[] { ("Francis", 20), ("Lindsey", 30), ("Ashley", 40) };
people.MaxBy(person => person.Age).Dump(); // ("Ashley", 40)
people.MinBy(x => x.Name).Dump(); // ("Ashley", 40)

Chuck

这个功能期待已久了,简单来说就是按 BatchSize 对一个集合进行分组,分组后每个小集合的元素数量最多是 BatchSize,之前我们自己写了一个扩展方法来实现,现在可以直接使用这个扩展方法了,来看下面的示例就能够明白了:

var list = Enumerable.Range(1, 10).ToList();
var chucks = list.Chunk(3);
chucks.Dump();// [[1,2,3],[4,5,6],[7,8,9],[10]]

Default enhancement

针对于 FirstOrDefault/LastOrDefault/SingleOrDefault 这几个扩展方法,之前的版本中我们是不能够指定默认值的,如果遇到 Default 的情况,会使用泛型类型的默认值,在 .NET 6 之后我们就可以指定一个默认值了,示例如下:

Enumerable.Empty<int>().FirstOrDefault(-1).Dump();
Enumerable.Empty<int>().SingleOrDefault(-1).Dump();
Enumerable.Empty<int>().LastOrDefault(-1).Dump();

Zip enhancement

var xs = Enumerable.Range(1, 5).ToArray();
var ys = xs.Select(x => x.ToString());
var zs = xs.Select(x => x % 2 == 0);foreach (var (x,y,z) in xs.Zip(ys, zs))
{$"{x},{y},{z}".Dump();
}

输出结果如下:

1,1,False
2,2,True
3,3,False
4,4,True
5,5,False

More

除了上面的更新之外,微软还提供了一个 TryGetNonEnumeratedCount(out int count) 方法来尝试获取 Count ,这样如果 IEnumerable<T> 是一个 ICollection 对象就能比较高效地获取 Count,而不用调用 Count() 扩展方法,不需要遍历 IEnumerable 对象

另外针对原来的 Min/Max 扩展方法,.NET 6 会增加一个重载,可以比较方便地指定一个比较器

public static TSource Min<TSource>(this IEnumerable<TSource> source, IComparer<TSource> comparer);
public static TSource Max<TSource>(this IEnumerable<TSource> source, IComparer<TSource> comparer);
public static TSource Min<TSource>(this IQueryable<TSource> source, IComparer<TSource> comparer);
public static TSource Max<TSource>(this IQueryable<TSource> source, IComparer<TSource> comparer);

References

  • https://github.com/WeihanLi/SamplesInPractice/blob/master/net6sample/LinqSample/Program.cs

  • https://devblogs.microsoft.com/dotnet/announcing-net-6-preview-4/#system-linq-enhancements

  • .NET 6 Preview 4 Released

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/300011.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

SOA架构师注意的问题

什么是SOA架构设计师的职责? 那什么是企业级SOA架构设计师的具体角色呢?什么是SOA架构设计师与设计和开发人员之间的差别呢?相信这些都是使大家最容易产生迷惑的问题。举个实际的例子来说&#xff0c;当构建一个基于SOA架构的系统的时候&#xff0c;针对一个具体的 service&…

计算机如何选件组装硬盘,组装电脑如何配置 组装电脑须知事项【详解】

对于现在的It男来说&#xff0c;组装电脑是一件再小不过的事情了。如果不太懂电脑硬件的朋友&#xff0c;可能组装电脑还是有一些困难&#xff0c;下面我们简单的来说说电脑是如何组装的&#xff0c;最新的电脑配置单情况是怎么样的。电脑组装主要有选件、检查配件、点亮主板、…

crontab定时任务中文乱码问题

手动执行都很正常的的脚本&#xff0c;添加到定时任务中日志文件全是乱码经过多方查证终于找到了原因&#xff01;crontab启动的任务没有获取系统的环境变量&#xff0c;导致中文乱码解决办法&#xff1a; 在执行的脚步中添加编码方式或者添加对应的环境变量如&#xff1a;1、…

.NET 平台采用率的提升归功于开源

微软近日发布了一篇博客&#xff0c;以对话形式与 .NET 工程师探讨了一下有关 .NET 项目的开源经验和心得。其中指出&#xff0c;.NET 软件开发平台采用率的提升主要归功于开源。根据介绍&#xff0c;微软在 2015 年将其 CoreCLR .NET 执行引擎作为开源发布&#xff0c;并在 20…

新世纪英汉词典 | 今日最佳

全世界只有3.14 %的人关注了青少年数学之旅&#xff08;图源 荷兰鸭&#xff0c;侵权删&#xff09;

发布一个biztalk 解析Excel文件到xml消息的管道组件

<?xml:namespace prefix o /><?xml:namespace prefix v /> 此pipeline component主要功能是通过ODBC的excel驱动把excel文件转成xml的消息。excel文件可以是biztalk通过从各种适配器获得&#xff0c;比如从file、ftp、msmq、http等等适配器获得excel文件的数…

点歌软件测试自学,实际歌唱对比测试

四、实际歌唱对比测试光说不练假把戏&#xff0c;卡拉OK软件真正PK还是在实唱方面。所以我们现在就来测试一下这四款软件在真人真唱方面表现的到底怎么样。四款软件在点唱歌曲时都需要在线下载&#xff0c;经过测试&#xff0c;在普通ADSL(1M带宽)的环境下歌曲加载速度都不慢&a…

tomcat学习笔记(JDK+TOMCAT+AXIS)

总算开始动手毕设了。先搭建web service的平台吧&#xff0c;要 jdk&#xff08;1.6&#xff09;tomcat&#xff08;5.5.27&#xff09;axis&#xff08;1.4&#xff09;&#xff0c;还要下载四个独立的包&#xff1a;activation.jar mail.jar xerces.jar xmlsec-1.4.0.jar。我…

如何让 dotnetcore 在 Linux 上后台运行?

咨询区 jjmcc&#xff1a;我遇到了几个奇怪的问题不知道如何去解决&#xff0c;场景是这样的&#xff0c;我的开发环境是 windows&#xff0c;每次发布代码时我会使用 vs 的 publish 发布代码&#xff0c;然后将代码copy到 AWS EC2 上&#xff0c;然后用 dotnet 命令将程序跑起…

TI BSL in python

今天花了一下午在这个上面&#xff0c;被这个工具整没脾气了快。花点功夫记录一下。 代码是在linux下下过来的&#xff1a; bzr branch lp:python-msp430-tools 看了下&#xff0c;有我想要的器件。然后想着拿到win下工作&#xff0c;就打包拷贝过来。安装&#xff1a; > py…

不懂物理,何以谈科技?

全世界只有3.14 % 的人关注了青少年数学之旅孩子对这个世界有着最纯粹的好奇&#xff0c;经常会问许许多多他们在日常生活中遇到的种种问题。天空为什么是蓝色的&#xff1f;电是怎么来的&#xff1f;为什么不管怎么使劲儿蹦&#xff0c;还是会落到地上&#xff1f;像小木的表妹…

硬盘结构及硬盘错误的解决方法(一)

硬盘的结构一、物理结构&#xff1a;硬盘在物理结构上由头盘组件和控制电路板两大部分组成。 ㈠ 头盘组件头盘就是磁头和盘片的意思。头盘组件包括盘体、电机、磁头等部件。所有部件密封在外壳中&#xff0c;绝对无尘、真空&#xff0c;如果你一旦开启了这个密封外壳&#xff0…

七0二所与江南计算机研究所,江南大学:一所被低估的“211”大学,2个A+学科,丝毫不输985...

文/角角老师导语&#xff1a;江南大学&#xff0c;尽管是一所“211工程”大学&#xff0c;但&#xff0c;在外省学生的意识里&#xff0c;看名字就是“野鸡大学”或者“民办大学”。其实&#xff0c;江南大学&#xff0c;实力很强&#xff0c;而是很低调&#xff0c;在教育部第…

Facebook 如何管理150亿张照片

Facebook 的照片分享很受欢迎&#xff0c;迄今&#xff0c;Facebook 用户已经上传了150亿张照片&#xff0c;加上缩略图&#xff0c;总容量超过1.5PB&#xff0c;而每周新增的照片为2亿2000万张&#xff0c;约25TB&#xff0c;高峰期&#xff0c;Facebook 每秒处理55万张照片&a…

Kubernetes全栈架构师(资源调度上)--学习笔记

▲ 点击上方“DotNet NB”关注公众号回复“1”获取开发者路线图学习分享 丨作者 / 郑 子 铭 这是DotNet NB 公众号的第171篇原创文章目录Replication Controller和ReplicaSet无状态服务Deployment概念Deployment的创建Deployment的更新Deployment的回滚Deployment扩容和缩容…

Python基础04 运算

原文:Python基础04 运算作者&#xff1a;Vamei 出处&#xff1a;http://www.cnblogs.com/vamei 欢迎转载&#xff0c;也请保留这段声明。谢谢&#xff01; Python的运算符和其他语言类似 &#xff08;我们暂时只了解这些运算符的基本用法&#xff0c;方便我们展开后面的内容&am…

求护士的心理阴影面积 | 今日最佳

全世界只有3.14 %的人关注了青少年数学之旅&#xff08;图源 叛逆行为艺术&#xff0c;侵权删&#xff09;

RBAC 权限入门

RBAC 权限入门 RBAC概念 RBAC&#xff1a;Role Based Access Control&#xff0c;核心是用户只和角色关联&#xff0c;而某角色可以拥有各种各样的权限并可继承。 RBAC白话介绍 RBAC有很多模型&#xff0c;最简单的就是Core RBAC。说白了就是User用户, Role角色, Permission许可…

华为服务器如何用pe重装系统,教你华为u盘重装win10系统详细图文

华为笔记本电脑的外型真的很时尚&#xff0c;以及其轻薄便捷的特色&#xff0c;迅速吸引力一大波粉丝。目前的华为笔记本电脑使用的操作系统基本是win10系统了&#xff0c;win10系统升级经常出现错误&#xff0c;下面小编就给你讲解下U盘重装win10的方法。喜欢完游戏的朋友来说…

常用开源链接

MLDonkey/Emule 等服务器更新sever.met 点此更新 国内FreeBSD-FTP 连接 OSL FTP 镜像 Index of /FreeBSD/ports/amd64/packages-6-stable/net-p2p/ 连接 转载于:https://www.cnblogs.com/ableid/archive/2009/05/01/1447477.html