Welcome to ShenZhenJia Knowledge Sharing Community for programmer and developer-Open, Learning and Share
menu search
person
Welcome To Ask or Share your Answers For Others

Categories

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()?

See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
thumb_up_alt 0 like thumb_down_alt 0 dislike
162 views
Welcome To Ask or Share your Answers For Others

1 Answer

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
});

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
thumb_up_alt 0 like thumb_down_alt 0 dislike
Welcome to ShenZhenJia Knowledge Sharing Community for programmer and developer-Open, Learning and Share
...