Distinct()方法不起作用

时间:2014-02-12 14:35:56

标签: c# linq

我有一个类似于此的LINQ:

var list = (from g in myPreBuiltQuery
            where g.Address != null
            orderby g.Schools.SchoolName
            select new ResultFindSummary
            {
               // fill some fields for this class
            }).Take(100).Distinct().ToArray();

但它仍然会返回额外的重复结果。

4 个答案:

答案 0 :(得分:4)

问题在于您创建了100个不同的自定义类型实例(ResultFindSummary),并且自定义类型的实例在引用同一对象时才被视为相等。

解决方案是覆盖Equals()类中的GetHashCode()ResultFindSummary方法。

答案 1 :(得分:3)

Distinct在内存中的项目上使用IEqualityComparer。 现在,您正在对可能被错误翻译的SQL查询进行区分。 (您可以使用SQL事件探查器进行检查)。

两种可能的解决方案=>将groupby与第一个结合使用。如果你想直接使用sql。

或者在将结果集转换为内存后使用distinct(使用.ToList())并在SomeClass上实现IEqualityComparer。

答案 2 :(得分:2)

您是否在ResultFindSummary类中实现了Equals方法?

以下是MSDN关于如何使用Distinct()函数的主题:http://msdn.microsoft.com/en-us/library/bb348436(v=vs.110).aspx

答案 3 :(得分:2)

您正在尝试对ResultFindSummary对象执行区分。要在对象上使用Distinct,您需要使用提供实现IEqualityComparer接口的类的Distinct覆盖(http://msdn.microsoft.com/en-us/library/bb338049%28v=vs.110%29.aspx)...

http://msdn.microsoft.com/en-us/library/ms132151%28v=vs.110%29.aspx