.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
, LastOrDefault
和SingleOrDefault
方法当未找到集合元素时将返回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功能改进相关推荐
- php 5.6 新特性,PHP 5.6正式发布:新特性、及功能改进介绍
经过了长时间的开发测试,新版本PHP程序(PHP5.6正式版)终于发布了.新版本中加入了一些实用的新特性,也摒弃了一些冗余的功能.同时,也对部分原有功能进行了改进.下面就一起看看PHP 5.6正式版到 ...
- .NET 6新特性试用 | 总结:我最喜欢的5个特性
前言 不知不觉,<.NET 6新特性试用>系列文章已经写了20多篇,而今天终于要告一段落了. 如果你还没有看过,详细文章列表在这里: .NET 6新特性试用系列 在这么多特性中,我最喜欢如 ...
- java9新特性--jShell--命令语法改进:try语和接口的私有方法--String存储结构变更--集合工厂方法--模块化系统--InputStream 加强--增强的 Stream API
目录 Java 9 的新特性 JDK 和 JRE 目录结构的改变 模块化系统: Jigsaw -> Modularity 实现目标 模块 结构 jShell命令 产生背景 设计理念 实现目标 j ...
- .NET 6新特性试用 | 可空引用类型
前言 在查看<隐式using指令>功能时,我们在csproj中发现这样一个属性: 那么,Nullable到底是干嘛的? 可为空上下文 严格来说,这不是新特性,而是C# 8.0引入的特性之一 ...
- 5.0 新特性试用体验之 Clustered Index
作者:hzc989 原文来源: https://tidb.net/blog/69dd056c [是否原创]是 [首发渠道]TiDB 社区 [目录] 一.引言 二.基础前情回顾 三.era withou ...
- oracle12c spa,Oracle12c功能加强 新特性之管理功能的加强
1. 数据文件在线重命名和迁移数据库 不想先前的版本,在Oracle12cR1中,数据文件的迁移或重命名再也不要求一系列的步骤,例如:将表空间至于只读模式,而后数据文件逻辑等操做.在12cR1中 ...
- Oracle12c功能增强 新特性之管理功能的增强
1. 数据文件在线重命名和迁移 不想先前的版本号.在Oracle12cR1中,数据文件的迁移或重命名不再要求一系列的步骤,比如:将表空间至于仅仅读模式,然后数据文件逻辑等操作.在12cR1中.数 ...
- Json.net/Newtonsoft 3.0 新特性JObject/Linq to Json
Json.net codeplex :http://www.codeplex.com/Json 原本感觉Newtonsoft.Json和.net自己的JavaScriptSerializer相差无几, ...
- .NET 6新特性试用 | SDK工作负载
前言 为了应对.NET SDK能够支持的程序集项目(例如iOS.Android.WASM)的不断增长,从.NET 6开始,允许用户仅安装必要的SDK(例如ASP.NET Core),而不是一次性安装& ...
最新文章
- MultiBaC包消除不同组学数据之间的批次效应
- Jackson 通过自定义注解来控制json key的格式
- 南阳理工大学 gnns 新基准
- python 判断 图片是否相同
- 16年寒假随笔(2)
- 【bzoj5082】弗拉格 矩阵乘法
- LC.exe”已退出,代码为 -1
- Abp + Grpc 如何实现用户会话状态传递
- SyntaxError: ‘return‘ outside function 在python里面的报错问题
- 自己动手做cpu_如何建立一个自己动手做心动追踪装置
- 公共基础知识计算机,事业单位考试公共基础知识:计算机基础知识
- Kafka 源码解析:Server 端的运行过程
- java读取文件乱码
- Windows+Ubuntu 搭建私有云桌面服务
- 二维彩虹二维码产品功能更新:增加“赞赏”、“重置”功能
- matlab 转换为相对湿度
- 学习笔记---ih5_九宫格_拼图
- 物联网卡和流量卡网速对比,看看谁更强?
- 三星新旗舰手机 GALAXY S III正式发布
- 蚂蚁代理免费代理ip爬取(端口图片显示+token检查)