views:

144

answers:

2

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?

+2  A: 

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()
Sander Rijken
Correction: I would need to do a .GroupBy(c=> c.Id)
Rio
Oh ok, I thought you needed `c.Location.Name` because of the second code sample in your question. Anyway, I'll update accordingly
Sander Rijken
Why are `Id` and `Name` both set to `c.Location.Name`?
Sander Rijken
A: 

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.

queen3