Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Distinct() doesn't work

I have the following linq expression:

AgentsFilter = new BindableCollection<NameValueGuid>((
    from firstEntry in FirstEntries
    select new NameValueGuid { 
        Name = firstEntry.Agent,
        Value = firstEntry.AgentId
    }).Distinct()
);

But because of some reason, the AgentsFilter Collection is full of duplicates. What is wrong with my Distinct()?

like image 366
David Shochet Avatar asked Aug 09 '12 13:08

David Shochet


Video Answer


1 Answers

Distinct will use the Equals method on NameValueGuid to find duplicates. IF you do not override Equals, then it will check references.

You can add an extra step to avoid overriding Equals, by using an anonymous type. Anonymous types automatically override Equals and GetHashCode to compare each member. Doing the distinct on the anonymous type, then projecting that onto your class will solve the problem.

from firstEntry in FirstEntries
select new
{ 
    Name = firstEntry.Agent,
    Value = firstEntry.AgentId
}).Distinct().Select(x => new NameValueGuid
{
    Name = x.Name,
    Value = x.Value
});
like image 94
cadrell0 Avatar answered Oct 08 '22 20:10

cadrell0