NewYour coding agent can read the release notes before it upgrades.Set up the MCP server →
NuGet · #501 most downloaded on NuGet
This project enhances LINQ to Objects with the following methods: Acquire, Aggregate (some EXPERIMENTAL), AggregateRight, Append, Assert, AssertCount, AtLeast, AtMost, Await (EXPERIMENTAL), AwaitCompletion (EXPERIMENTAL), Backsert, Batch, Cartesian, Choose, CountBetween, CompareCount, CountBy, CountDown, Consume, DistinctBy, Duplicates, EndsWith, EquiZip, Evaluate, Exactly, ExceptBy, Exclude, FallbackIfEmpty, FillBackward, FillForward, Flatten, Fold, ForEach, From, FullGroupJoin, FullJoin, Generate, GenerateByIndex, GroupAdjacent, Index, IndexBy, Insert, Interleave, Lag, Lead, LeftJoin, Maxima, Memoize (EXPERIMENTAL), Merge (EXPERIMENTAL), Minima, Move, OrderBy, OrderedMerge, Pad, PadStart, Pairwise, PartialSort, PartialSortBy, Partition, Permutations, Pipe, Prepend, PreScan, Random, RandomDouble, RandomSubset, Rank, RankBy, Repeat, Return, RightJoin, RunLengthEncode, Scan, ScanBy, ScanRight, Segment, Sequence, Shuffle, SkipLast, SkipLastWhile, SkipUntil, Slice, SortedMerge, Split, StartsWith, Subsets, TagFirstLast, TakeEvery, TakeLast, TakeUntil, ThenBy, ToArrayByIndex, ToDataTable, ToDelimitedString, ToDictionary, ToHashSet, ToLookup, Trace, Transpose, TraverseBreadthFirst, TraverseDepthFirst, TrySingle (EXPERIMENTAL), Unfold, Window, WindowLeft, WindowRight, ZipLongest, ZipShortest
Last release 2 years ago
no release in 18 months
Ships unpredictably
gaps range from 9 days to 3.2 years
Some releases are documented
notes for 11 of 33 stable releases
2 versions withdrawn
withdrawn after publishing
127 years old
52 releases · first in 1900
Generic versions of Sequence for any number type by @atifaziz in #893 :
Sequence for any number type by @atifaziz in #893:
public static IEnumerable<T> Sequence<T>(T start) where T : INumber<T>, IMinMaxValue<T>
public static IEnumerable<T> Sequence<T>(T start, T stop) where T : INumber<T>
public static IEnumerable<T> Sequence<T>(T start, T stop, T step) where T : INumber<T>SkipLastWhile extension by @ArmoryNode in #1085EndsWith by @atifaziz in #1082CountBy in .NET 9+ by @atifaziz in #1092One column per quarter.
This is a maintenance release that introduces no new APIs.
This is a maintenance release that introduces no new APIs.
This is a bug fix and maintenance release.
This is a bug fix and maintenance release.
Merge by @atifaziz in #1059 🪲@julienasp made their first contribution in #1037
DuplicatesSubsets to-do about clearer members names by @atifaziz in #1048RandomSubset internals for DRY, removing closure by @viceroypenguin in #1049this qualifier by @atifaziz in #1050Duplicates extension by @julienasp in #1037ToDictionary() in net8+ by @viceroypenguin in #1040EqualityComparer<T>.Create from .NET 8 by @atifaziz in #1051Subsets core into an iterator method by @atifaziz in #1052Permutations into an iterator method by @atifaziz in #1054Since this a major release, some source and binary breaking changes that are listed below were introduced. Please read the details to see if you're af…
This release introduces an experimental version of Batch that allows use of an array pool for batches, which can especially help reduce (potentially LOH) allocations for very large batch sizes.
New aliases are introduced for the following existing methods because they conflicted with identically named methods introduced in .NET 6.0, but which differ in definition and behaviour:
The superseded methods have been marked obsolete and will most probably be removed in a future version. For more details, see #1018.
In a similar vein, this release also retires the following extension methods that are now part of .NET proper and which have identical names and behaviour:
AppendBatchConcatDistinctByPrependSkipLastTakeLastToHashSetThis helps to prevent ambiguity errors during compilation when System.Linq and MoreLinq namespaces are imported together in a file or a namespace. The retirement is done such that the above methods appear as regular static methods rather than extension methods depending on the compilation target. This helps to maintain source as well as binary compatibility. Special thanks to @viceroypenguin for helping with this (see #945 for more details). The upshot is that projects that prefer to import the MoreLinq namespace rather than individual extensions can simply do so without running into ambiguity compilation errors. However, do bear in mind that this does not prevent future conflicts from appearing should more of MoreLINQ's methods find their way into .NET.
Since this a major release, some source and binary breaking changes that are listed below were introduced. Please read the details to see if you're affected.
Interleave shouldn't validate otherSequences members #1029Minima & Maxima to supersede MinBy & MaxBy #1018Windowed that's been obsolete since 3.0 #1016Concat that's been obsolete since 3.0 #993ToDataTable cannot be null #802Subsets(0) should return an empty set #645Batch should return IEnumerable<T[]> #98Concat method by @pflajszer in #1002FillForward when filler is null by @atifaziz in #1006ToDataTable paths by @atifaziz in #1007ToDataTable implementation by @atifaziz in #1008SortedMerge: Test do not call MoveNext eagerly by @Orace in #735EnableGenerateDocumentationFile warning as workaround for IDE0005 by @atifaziz in #1013Batch to return arrays by @atifaziz in #1014Subsets so it returns an empty set when k = 0 by @Orace in #646Windowed that's superseded by Window by @atifaziz in #1017expressions argument of ToDataTable by @atifaziz in #1021Minima & Maxima as successors to MinBy & MaxBy by @atifaziz in #1019otherSequences argument of Interleave by @atifaziz in #1031Pad/PadStart width is invalid by @atifaziz in #1030This is a bug fix and maintenance release.
This is a bug fix and maintenance release.
This is a bug fix and maintenance release.
This is a bug fix and maintenance release.
Permutations for when source length is >12 by @atifaziz in #979 🪲This release notably adds nullable reference type annotations (see #582 and #803 ), the two experimental operators below and fixes a few bugs :
This release notably adds nullable reference type annotations (see #582 and #803), the two experimental operators below and fixes a few bugs:
Merge (experimental)Batch overloads using an array pool (experimental)While there are no breaking API changes in this release, the following changes will affect users using on .NET versions that have reached end-of-life:
OrderedMerge: add tests by @Orace in #736IReadOnlyCollection<T> too by @leandromoh in #750Interleave: Do not call GetEnumerator eagerly by @Orace in #730LastOrDefault for extrema sequence by @atifaziz in #761MinBy/MaxBy by @atifaziz in #765System.Linq for async streams by @atifaziz in #781TrySingle signature with honest nullable annotations by @atifaziz in #801FallbackIfEmpty by @sid-6581 in #808Pad* signatures with more honest nullable annotations by @atifaziz in #804Lag & Lead signatures with more honest nullable annotations by @atifaziz in #805ReverseComparer signature with more honest nullable annotations by @sid-6581 in #807GroupAdjacent null key handling bug by @atifaziz in #810FullGroupJoin signature with more honest nullable annotations by @sid-6581 in #806Batch does not reuse internal array by @leandromoh in #820README by @GitHubPang in #828null check in Batch method by @MateoMiller in #846Flatten signature parts to be null-oblivious by @atifaziz in #847Batch overload by @atifaziz in #849ToDictionary to notnull by @atifaziz in #852CountBy/ScanBy by @atifaziz in #855+= to increment by @atifaziz in #869MayBeNull with ? in IExtremaEnumerable members by @atifaziz in #872Flatten tests by @atifaziz in #875Lookup + Grouping from .NET 7 sources by @atifaziz in #879Batch overloads using an array pool by @atifaziz in #856#nullable enable on tests by @viceroypenguin in #888Subject by @atifaziz in #891Memoize documentation by @viceroypenguin in #895Partition by @viceroypenguin in #897Partition exceptions by @viceroypenguin in #886Partition by @viceroypenguin in #896Memoize as expression by @viceroypenguin in #894Partition Nullability by @viceroypenguin in #881Zip* docs by @viceroypenguin in #887ZipLongest by @viceroypenguin in #900*Zip* tests by @atifaziz in #908Rank comparer argument by @atifaziz in #913ToDataTable expressions argument by @atifaziz in #914! with debug assertion in Permutations by @atifaziz in #917LinkedList in Interleave to avoid many null checks by @Orace in #726Interleave tests by @Orace in #728Comparer by @atifaziz in #921Permutations by @atifaziz in #925AssertCount and Fold by @atifaziz in #929TagFirstLast by @Orace in #928ToArrayByIndex by @atifaziz in #932TagFirstLast implementation for speed by @Orace in #643Note truncated.
This is a minor bug fix release that primarily addresses a regression with Batch that was introduced in version 3.3.1 .
This is a minor bug fix release that primarily addresses a regression with Batch that was introduced in version 3.3.1.
3.3.1 milestone for changes in this release
And lots of bug fixes. 🐛
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
The following are now obsolete:
c813ef2
Adds the following operators:
AtMost
CountBetween
Exactly
FillBackward
FillForward
The following are now obsolete:
Incremental
ToDelimitedString (only overloads with zero arguments)
See also:
2.1.0 milestone for changes in this release
Commit history since 2.0.0
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Your coding agent can read these notes before it upgrades. Set up the MCP server →