如何实现的IEqualityComparer返回不同的值? [英] How to implement IEqualityComparer to return distinct values?
问题描述
我有一个L2E查询,返回包含重复对象的一些数据。我需要删除这些重复的对象。基本上,我应该假设如果他们的ID都相同则对象是重复的。我试过 q.Distinct()
,但仍返回重复的对象。然后我试着实现我自己的IEqualityComparer,并把它传递给鲜明的()
方法。该方法失败,下面的文字:
I have a L2E query that returns some data that contains duplicate objects. I need to remove those duplicate objects. Basically I should assume that if their IDs are the same then the objects are duplicate. I've tried q.Distinct()
, but that still returned duplicate objects. Then I've tried implementing my own IEqualityComparer and passing it to the Distinct()
method. The method failed with following text:
LINQ实体无法识别方法
System.Linq.IQueryable 1 [DAL.MyDOClass]
1 [DAL.MyDOClass]
不同的[MyDOClass](System.Linq.IQueryable
System.Collections.Generic.IEqualityComparer`1 [DAL.MyDOClass])'
法,这种方法不能被翻译成店前pression。
LINQ to Entities does not recognize the method 'System.Linq.IQueryable
1[DAL.MyDOClass] Distinct[MyDOClass](System.Linq.IQueryable
1[DAL.MyDOClass], System.Collections.Generic.IEqualityComparer`1[DAL.MyDOClass])' method, and this method cannot be translated into a store expression.
这是EqualityComparer执行:
And here is the implementation of 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
是否正确?
推荐答案
这是 EqualityComparer
不是要走的路 - 它只能过滤你的结果在内存中如设置:
An EqualityComparer
is not the way to go - it can only filter your result set in memory eg:
var objects = yourResults.ToEnumerable().Distinct(yourEqualityComparer);
您可以通过标识使用 GROUPBY
方法组和首先
方法,让你的数据库只检索每个ID如独特的条目:
You can use the GroupBy
method to group by IDs and the First
method to let your database only retrieve a unique entry per ID eg:
var objects = yourResults.GroupBy(o => o.Id).Select(g => g.First());
这篇关于如何实现的IEqualityComparer返回不同的值?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!