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

360影视 2025-01-17 00:19 2

摘要:我是编程乐趣,一个10年.Net开发经验老程序员,点击右上方“关注”,每天为你分享开源项目和编程知识。私信回复:888,领取.Net学习资料!

大家好,我是编程乐趣。

我们都知道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 { 1, 3, 5 }.Interleave(new { 2, 4, 6 });

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

// 如果所有元素都大于 0,则不抛出异常new { 1, 2, 3, 4 }.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:根据指定的键选择器函数对序列中的相邻元素进行分组。

IndexIndexBy:分别返回一个序列,其中键是值在源序列中的零基索引,以及对序列中的每个元素应用键生成函数并返回包含原始序列的元素及其键和索引的序列。

Insert:将一个序列的元素插入到另一个序列的指定索引处。

Interleave:将两个或多个序列的元素交错合并为一个序列,跳过已消耗的序列。

LagLead:分别通过评估间隔为负偏移和正偏移的元素对来生成序列的投影。

LeftJoin:执行两个序列之间的左外连接。

Maxima Minima:分别返回给定序列中的最大值和最小值,基于给定的投影。

Move:返回一个序列,其中源序列中的一系列元素被移动到新的偏移量。

OrderBy:根据键对序列中的元素进行排序。

OrderedMerge:将两个有序序列合并为一个有序序列。

Pad PadStart:分别用默认值填充序列,如果序列的长度小于给定宽度,则在末尾和开头填充。

Pairwise:返回一个序列,通过对源序列中的每个元素及其前一个元素应用函数来生成。

PartialSort 和 PartialSortBy:分别结合 OrderBy 和 Take 操作。

Partition:根据谓词或布尔键或多达 3 组键对序列进行分区。

Permutations:生成表示原始序列排列的列表序列。

Pipe:对源序列中的每个元素执行给定操作并返回。

Prepend:在序列前面添加一个单一值。

PreScan:对元素序列执行前扫描(独占前缀和)。

Random、RandomDouble 和 RandomSubset:分别返回无限的随机整数序列、0.0 到 1.0 之间的随机双精度值序列和原始序列中指定大小的随机元素序列。

Rank 和 RankBy:分别对序列中的每个项目进行降序排名,使用默认比较器。

Repeat:无限或特定次数地重复序列。

Return:返回一个包含给定项的单元素序列。

RightJoin:执行两个序列之间的右外连接。

RunLengthEncode:通过将相同元素的连续实例转换为表示项目及其出现次数的 KeyValuePair 来运行长度编码序列。

Scan、ScanBy 和 ScanRight:分别对元素序列执行扫描(包含前缀和)、对序列元素键应用累加器函数并返回键及其中间累加器状态,以及对元素序列执行右结合扫描。

Segment:使用基于原始序列的段检测器将序列划分为多个序列。

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

Shuffle:返回原始序列中元素的随机顺序序列。

SkipLast 和 SkipUntil:分别跳过序列末尾的指定数量的元素和直到给定谓词返回 true 时的当前源项。

Slice:从序列中提取从特定零基起始索引开始的元素。

SortedMerge:将两个或多个共同顺序(升序或降序)的序列合并为一个保留该顺序的单个序列。

Split:通过分隔符将源序列分割。

StartsWith:判断第一个序列的开头是否等同于第二个序列。

Subsets:返回一个序列,表示原始序列的所有大小的子集。

TagFirstLast:返回一个序列,通过对源序列中的每个元素应用函数并附加参数来指示元素是否为序列的第一个和/或最后一个。

TakeEvery、TakeLast 和 TakeUntil:分别返回源序列中的每 N 个元素、从序列末尾返回指定数量的连续元素和直到给定谓

04

项目地址

- End -

更多.Net开源项目合集(已整理300个):

来源:编程乐趣

相关推荐