我有一个类似于此的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();
但它仍然会返回额外的重复结果。
答案 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