I have a List<MyClass> someList
.
class MyClass
{
public int Prop1...
public int Prop2...
public int Prop3...
}
I would like to know how to get a new distinct List<MyClass> distinctList
from List<MyClass> someList
, but only comparing it to Prop2
.
Seven. Years. Later.
I know it's been a while, but I needed the simplest answer and at this time (with .NET 4.5.1) I found the following to be the most straight-forward answer I could get to:
My situation is that I have a ConcurrentDictionary that looks something like:
ConcurrentDictionary<long, FileModel>
The ConcurrentDictionary Values property is basically my
List<FileModel>
.*FileModel has a groupId that isn't necessarily unique (though, obviously the key (long) that I use to add the FileModel object into the dictionary is unique to the FileModel).
*Named for clarity in the example.
The point is that I have a large number of FileModels (imagine 100) in the ConcurrentDictionary and within those 100 FileModels there are 5 different groupIds.
At this point I just need a list of the distinct groupId.
So, again if I just had a list of FileModel the code would look like the following:
Just use the build-in function DistinctBy of Microsoft Ajax Ultility library like the sample blow:
First including library
then
you need to use
.Distinct(..);
extension method. Here's a quick sample:Do not forget about
GetHashCode
.Usage:
Create a class that implements the IEqualityComparer Interface that only checks for your Prop2-Property. You can then pass an instance of this class to the Distinct extension method.
Unfortunately there's no really easy built-in support for this in the framework - but you can use the
DistinctBy
implementation I have in MoreLINQ.You'd use:
(You can take just the
DistinctBy
implementation. If you'd rather use a Microsoft implementation, I believe there's something similar in the System.Interactive assembly of Reactive Extensions.)You can emulate the effect of
DistinctBy
usingGroupBy
and then just using the first entry in each group. Might be a bit slower that the other implementations though.