我有一个L2E查询,返回了一些包含重复对象的数据。我需要删除那些重复的对象。基本上,如果它们的ID相同,那么它们就是重复的对象。我试过 q.Distinct()
,但仍然返回重复的对象。然后我尝试实现自己的 IEqualityComparer
并将其传递给 Distinct()
方法。该方法失败并显示以下文本:
LINQ to Entities 不认识方法 'System.Linq.IQueryable
1[DAL.MyDOClass] Distinct[MyDOClass](System.Linq.IQueryable
1[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()
更好 - 就像在 这个问题 的 最高评分答案 中提到的那样。 - Martin Zaloga