Hello devz,
The Distinct extension from System.Linq is really useful but the DistinctBy a property is missing. So we will create our own DistinctBy extension. No worries, it’s really easy.
What is DistinctBy?
DistinctBy is a very simple extension snippet for C# which allows the developer to remove duplicated objects in a collection based on one of its properties (with a lambda expression as a parameter).
For example: myCollection.DistinctBy(x => x.Color);
Here is the snippet for the DistinctBy extension:
public static IEnumerable<T> DistinctBy<T, TKey>(this IEnumerable<T> items, Func<T, TKey> property)
{
return items.GroupBy(property).Select(x => x.First());
}
Code language: C# (cs)
Pretty straightforward, we regroup all the objects in a collection based on the targeted property, then we only keep the first one for each group.
So now you can just call the DistinctBy extension on a collection to get a collection of unique items:
var uniqueCollection = collectionWithDuplicates.DistinctBy(x => x.MyProperty).ToList();
Code language: C# (cs)
Why is DistinctBy useful?
Let’s use a simple example:
We have a collection of 6 hats with different colors, where 2 of them are blue, 2 greens and 2 reds. We just want a collection of hats with the different possibilities of colors. With the DistinctBy the result will be a collection of 3 items: 1 blue, 1 green and 1 red hat.
Happy coding! 🙂