Rio
Rio

Reputation: 14882

LINQ distinct on class item?

Note this question is similar this one except I'm not working with linq-to-sql, so the "let" is not usable.

Basically I have a select of the type

... .Select(c => new SampleClass { Id = c.Location.Name, Name = c.Location.Name }).Distinct().ToList()

which used to work when I just had

... .Select(c => c.Location.Name).Distinct().ToList()

How would I make a distinct call on one of the items within the SampleClass?

Upvotes: 2

Views: 2226

Answers (2)

queen3
queen3

Reputation: 15511

Is this what you need: http://sprokhorenko.blogspot.com/2009/11/convenient-distinct.html ?

This is an extension for IEnumerable that allows you to .Distinct() for any field (or even several ones using lambdas), which creates IEqualityComparer for you on the fly.

Upvotes: 0

Sander Rijken
Sander Rijken

Reputation: 21615

You can group items by the key, and then select what item from the group you want to use as value. I use FirstOrDefault as an example:

... .Select(c => new SampleClass { Id = c.Location.Name, Name = c.Location.Name })
    .GroupBy(c => c.Id)
    .Select(group => group.FirstOrDefault())
    .ToList()

Upvotes: 3

Related Questions