New LINQ methods in C# 13: Index, CountBy, AggregateBy
In this article, we will explore the new LINQ methods that (normally) will be introduced in C# 13, as part of the .NET 9 release during .NET Conf 2024.
These new methods are Index
, CountBy
, and AggregateBy
.
These LINQ methods are part of the release candidate, the final release may include changes or removals.
Upgrading to .NET 9 will give you a ton of LINQ optimizations, which you automatically get for free!
The examples throughout this article use the following data collection. We have a collection of 5 students, each with a name and a score.
Index link
The Index()
method (Enumerable.Index
The example below simply adds an index to each student in the collection.
Output:
CountBy link
The CountBy()
method (Enumerable.CountBy<TSource, TKey>) groups the elements in the collection by a key and returns the count of elements in each group.
The example below groups the students by their score and counts the number of students in each group.
Output:
It's also possible to use add an expression to build the identifier for the group. The example below groups the students by their score ("A" or "B" means the student has passed) and counts the number of students that passed or failed.
Output:
CountBy()
can also accept a comparer (IEqualityComparer<TKey>? keyComparer
) as the second argument.
AggregateBy link
The AggregateBy()
method (Enumerable.AggregateBy<TSource, TKey, TAccumulate>) groups the elements in the collection by a key and aggregates (similar to Aggregate()
) the elements in each group.
The first argument is the key selector, creating the group. The second argument is the initial value (seed) for each group. The third argument is the function that aggregates the elements in the group, it receives the value of the group and the current element.
The example below groups students by their scores.
Output:
AggregateBy()
can also accept a comparer (IEqualityComparer<TKey>? keyComparer
) as the last argument.
Feel free to update this blog post on GitHub, thanks in advance!
Join My Newsletter (WIP)
Join my weekly newsletter to receive my latest blog posts and bits, directly in your inbox.
Support me
I appreciate it if you would support me if have you enjoyed this post and found it useful, thank you in advance.