我有以下linq表达式:

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

但是由于某种原因,AgentsFilter集合中充满了重复项。我的Distinct()有什么问题?

最佳答案

Distinct将在Equals上使用NameValueGuid方法查找重复项。如果您没有覆盖Equals,那么它将检查引用。

您可以通过使用匿名类型添加一个额外的步骤来避免覆盖等于。匿名类型自动覆盖Equals和GetHashCode以比较每个成员。对匿名类型进行区分,然后将其投影到您的类上即可解决该问题。

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

关于c# - Distinct()不起作用,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/11884255/

10-10 21:29