【发布时间】:2012-01-23 13:21:56
【问题描述】:
我有一个 L2E 查询,它返回一些包含重复对象的数据。我需要删除那些重复的对象。基本上我应该假设如果它们的 ID 相同,那么对象是重复的。我试过q.Distinct(),但仍然返回重复的对象。然后我尝试实现自己的 IEqualityComparer 并将其传递给 Distinct() 方法。该方法失败并显示以下文本:
LINQ to Entities 无法识别该方法 'System.Linq.IQueryable
1[DAL.MyDOClass] Distinct[MyDOClass](System.Linq.IQueryable1[DAL.MyDOClass], System.Collections.Generic.IEqualityComparer`1[DAL.MyDOClass])' 方法,并且该方法不能翻译成商店表达式。
这里是 EqualityComparer 的实现:
internal class MyDOClassComparer: EqualityComparer<MyDOClass>
{
public override bool Equals(MyDOClass x, MyDOClass y)
{
return x.Id == y.Id;
}
public override int GetHashCode(MyDOClass obj)
{
return obj == null ? 0 : obj.Id;
}
}
那么我该如何正确地写出我自己的IEqualityComparer呢?
【问题讨论】:
-
GroupBy()可能是比Distinct()更好的解决方案——就像在this question 上提到的in the top rated answer。
标签: c# entity-framework distinct iequalitycomparer