专栏名称: dotNET跨平台
专注于.NET Core的技术传播。在这里你可以谈微软.NET,Mono的跨平台开发技术。在这里可以让你的.NET项目有新的思路,不局限于微软的技术栈,横跨Windows,Linux 主流平台
目录
相关文章推荐
厦门日报  ·  热搜第一!微信又上新功能 ·  昨天  
生物探索  ·  Nature Biotechnology ... ·  4 天前  
厦门日报  ·  增长!翻倍!厦门,热辣滚烫! ·  4 天前  
51好读  ›  专栏  ›  dotNET跨平台

天天使用Linq,还不知道MoreLINQ的都必须看看!太强大了。

dotNET跨平台  · 公众号  ·  · 2025-01-17 08:00

正文

大家好,我是编程乐趣。
我们都知道Linq非常强大,有了它以后我们对各种数据的查询、过滤方便很多。
虽然 LINQ 提供了丰富的功能,但在实际开发中,开发者可能会遇到一些 LINQ 没有直接支持的场景。
MoreLINQ 正是为了补充这些功能而诞生的。MoreLINQ 提供了大量额外的扩展方法,使得 LINQ 更加强大和灵活。
01
项目简介
MoreLINQ 通过扩展方法增强了 LINQ to Objects,使其更加丰富和灵活。这些扩展方法保持了 LINQ 的精神,提供了更多的操作和功能。
02
使用方法
1、安装依赖库
Install-Package morelinq
2、一些常见的场景
2.1 AggregateRight:对序列应用右结合的累加器函数。
// (1 - (2 - (3 - 4))) = -2var result = new[] { 1, 2, 3, 4 }.AggregateRight((a, b) => a - b);
2.2 Batch:将源序列批量分组为指定大小的桶。
// [[1, 2, 3], [4, 5, 6]]var batches = new[] { 1, 2, 3, 4, 5, 6 }.Batch(3);
2.3 Interleave:将两个或多个序列的元素交错合并为一个序列。
// [1, 2, 3, 4, 5, 6]var interleaved = new[] { 135 }.Interleave(new[] { 246 });

2.4 Assert:断言序列中的所有元素都满足给定条件,否则抛出异常。

// 如果所有元素都大于 0,则不抛出异常new[] { 1234 }.Assert(x => x > 0); 

2.5 Exactly:判断序列中的元素数量是否等于给定整数。

// truebool isExactlyFour = new[] { 1, 2, 3, 4 }.Exactly(4);

2.6 Sequence:生成一个在指定范围内(包含)的整数序列。

// [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]var sequence = MoreEnumerable.Sequence(1, 10);
03
更多方法
Acquire :确保源序列中的可处置对象都能成功获取。如果任何一个获取失败,则已成功获取的对象将被处置。
Aggregate :在单次遍历中依次应用多个累加器。
AggregateRight :对序列应用右结合的累加器函数。
Append :返回一个由头部元素和给定尾部元素组成的序列。
Assert :断言序列中的所有元素都满足给定条件,否则抛出异常。
AtLeast AtMost :分别判断序列中的元素数量是否大于等于或小于等于给定整数。
Batch :将源序列批量分组为指定大小的桶。
Cartesian :返回两个或多个序列的笛卡尔积。
Choose :对源序列中的每个元素应用函数,并返回结果元素的新序列。
CompareCount :比较两个序列并返回一个整数,指示第一个序列的元素数量是否少于、等于或多于第二个序列。
Consume :完全消耗给定的序列。
CountBetween :判断序列中的元素数量是否在给定的最小值和最大值之间。
CountBy :对序列中的每个元素应用键生成函数,并返回唯一键及其在原始序列中的出现次数。
DistinctBy :返回给定源中的所有不同元素,不同性通过投影和投影类型的默认相等比较器确定。
Duplicates :返回给定源中的所有重复元素。
EndsWith :判断第一个序列的末尾是否等同于第二个序列。
EquiZip :返回一个投影的元组序列,每个元组包含每个参数序列的第 N 个元素。如果输入序列长度不同,则抛出异常。
Exactly :判断序列中的元素数量是否等于给定整数。
ExceptBy :返回第一个序列中不在第二个序列中的元素集合,根据给定的键选择器。
Exclude :从序列中排除从给定索引开始的元素。
FallbackIfEmpty :返回序列的元素,如果原始序列为空,则回退到另一个序列。
FillBackward FillForward :分别用后续非空值或前一个非空值替换源序列中的每个空引用或值。
Flatten :展平包含任意嵌套序列的序列。
Fold :对包含 1 到 16 个元素的序列应用函数并返回结果。
ForEach:立即对源序列中的每个元素执行给定操作。
From :返回一个包含调用源序列中每个函数的结果的序列。
FullGroupJoin FullJoin :分别执行全组连接和全外连接。
Generate GenerateByIndex :分别生成由生成器函数连续生成的值序列和基于索引的值序列。
GroupAdjacent :根据指定的键选择器函数对序列中的相邻元素进行分组。
Index IndexBy :分别返回一个序列,其中键是值在源序列中的零基索引,以及对序列中的每个元素应用键生成函数并返回包含原始序列的元素及其键和索引的序列。
Insert :将一个序列的元素插入到另一个序列的指定索引处。
Interleave :将两个或多个序列的元素交错合并为一个序列,跳过已消耗的序列。
Lag Lead :分别通过评估间隔为负偏移和正偏移的元素对来生成序列的投影。
LeftJoin :执行两个序列之间的左外连接。
Maxima Minima :分别返回给定序列中的最大值和最小值,基于给定的投影。
Move :返回一个序列,其中源序列中的一系列元素被移动到新的偏移量。
OrderBy :根据键对序列中的元素进行排序。
OrderedMerge :将两个有序序列合并为一个有序序列。
Pad PadStart :分别用默认值填充序列,如果序列的长度小于给定宽度,则在末尾和开头填充。
Pairwise :返回一个序列,通过对源序列中的每个元素及其前一个元素应用函数来生成。
PartialSort 和 PartialSortBy :分别结合 OrderBy 和 Take 操作。






请到「今天看啥」查看全文