.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);//取最后一个Uservar 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“

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

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

相关文章

VS2010下的多线程窗口

多线程的调试一直是一个令人蛋疼的问题,一般的解决方法是写Log。有的时候想要直观地看一下线程的运行状态,简直是困难。幸好vs2010给我们提供了一个多线程窗口。 使用方式: 1、按F5进入调试状态下 2、按图1所示打开多线程窗口 图1 打开多线程…

linux cp 强制yes,linux cp实现强制覆盖

说明:linux下使用cp -fr src dest,发现即使加了-f也是不能强行覆盖的,这是为什么呢?原因:-f其实已经会强制覆盖了,但部份服务器会默认增加别名alias cp’cp -i’,因此当你执行cp时,其…

第2天:汇编语言与Makefile

汇编语言指令 ORG:origin,指定程序从某个地址开始,即把程序装载到内存的某个地址。 如:ORG 0x7c00,0x7c00作为是英特尔指定的。JMP:jump,跳转指令。entry, msg, loop:自定义标签&…

Android之如何用cmd方法查看logcat

使用cmd命令查看logcat 使用adb logcat命令可查看android系统和应用的log adb logcat //显示全部日志 adb logcat > c:\test.log //将日志输出保存到文件test.log logcat日志中的优先级/tag标记: android输出的每一条日志都有一个标记和优先级与其关联。 优先级是下面的…

Typora 开始收费, 不妨试试这个开源免费的MD编辑器

相信大家很多人都已经知道了, 最好用最受欢迎的 markdown 编辑器 - Typora, 从 1.0.0 版本已经开始收费, 根据其官网的介绍, 收费方式为买断制, 也就是一次付费永久使用, 价格是14.99 刀, 另外支持支付宝付款, 89 元人民币, 最多支持3台设备使用, 对于我来说, 算上家里和公司的…

MySQL - Found option without preceding group in config file

1.1.1 现象 启动MYSQL超时,windows提示错误,在服务中MYSQL状态一直处于starting状态,执行MYSQL命令,出现如下错误信息: error:found option without preceding group in config file:E:\webserver\mysql5\my.ini at li…

31天重构学习笔记19. 提取工厂类

概念:本文中的“提取工厂类”是指如果要创建的对象很多,则代码会变的很复杂。一种很好的方法就是提取工厂类。 正文:一般来说我们需要在代码中设置一些对象,以便获得它们的状态,从而使用对象,所谓的设置通常…

linux+4.4+android,Ubuntu 14.04 x64配置Android 4.4 kitkat编译环境的方法

Ubuntu 14.04 x64配置Android 4.4 kitkat编译环境的方法跟Ubuntu 12.04 - 13.10 以及jellybean编译环境配置没多大区别, 顺便记录下而已:64位Ubuntu 11.10下Android开发环境的搭建(JDKEclipseADTAndroid SDK详细) http://www.linuxidc.com/Linux/2013-06/85303.htm一、配置依赖…

Android之定时器实现的几种方式和removeCallbacks失效问题详解

转载:http://blog.csdn.net/xiaanming/article/details/9011193 实现定时器有很多种方式,在这里我简单的介绍几种方式 实现定时器有很多种方式,在这里我简单的介绍几种方式 (1)使用Handler Runnable的方式 Handler handler new Handler(…

android中的ContentProvider实现数据共享

为了在应用程序之间交换数据,android中提供了ContentProvider,ContentProvider是不同应用程序之间进行数据交换的标准API。当一个应用程序需要把自己的数据暴露给其他程序使用时,该应用程序可以通过提供contentProvider来实现,其他…

Blazor是春天还是寒风里的挣扎

title: Blazor是春天还是寒风里的挣扎 date: 2021-10-25 14:00:00 toc: true categories:- Blazor tags:- Blazor- MASA Blazor#官方解释BlazorBlazor允许您使用c#而不是JavaScript构建交互式web UI。Blazor应用由可重用的web UI组件组成,这些组件使用c#、HTML和CSS…

js个人笔记

2019独角兽企业重金招聘Python工程师标准>>> 看锋利的jquery第二版,,在前言的时候说建议使用最新版jquery,,然而在第二章结尾的地方有用到toggle()这个方法,,我自己用发现和书上的功能不同&…

第二天:装饰模式及面向对象设计原则4则

装饰模式是为已有功能动态地添加更多功能的一种方式.当系统需要新功能的时候,是向旧系统中添加新的代码.这些新加的代码通常装饰了原有类的核心职责或主要行为.这样的结果等同于在主类中加入新的字段,新的方法和新的逻辑,从而增加了主类的复杂度,而这些新加入的东西仅仅是为了满…

linux ntfs 速度慢,将U盘磁盘格式改成NTFS解决u盘复制速度慢问题

1、我们首先要看看U盘的文件系统是哪个?打开计算机-可移动磁盘-右击属性。2、目前打多数U盘采用的都是FAT32格式,这也是大多数USB2.0船速速度比较慢的原因。我们先用文件大小测试一个它的读写速度,格子这里用的是一个大概四百兆的文件,为了让…

触发器的创建、修改和删除

一﹕ 触发器是一种特殊的存储过程﹐它不能被显式地调用﹐而是在往表中插入记录﹑更新记录或者删除记录时被自动地激活。所以触发器可以用来实现对表实施复杂的完整性约束。 二﹕ SQL Server为每个触发器都创建了两个专用表﹕Inserted表和Deleted表。这两个表由系统来维…

Android之进程与线程的讲解

安卓平台中当首次启动运行一个组件的时候,Android会相应的启动了一个进程。默认的,所有的组件和程序运行在这个进程和线程中,也可以安排组件在其他的进程或者线程中运行。 进程:组件运行的进程由manifest file控制。组件的节点 —…

如何延迟一个 Task 的执行 ?

咨询区 Bruno Lopes我想实现一个可以在延迟 Xms 后执行一个 task 的需求,并要求能够实现在 xms 之前取消 task 的执行,我的参考代码如下:var _cancelationTokenSource new CancellationTokenSource();var token _cancelationTokenSource.To…