【发布时间】:2017-04-20 07:19:31
【问题描述】:
我有一个这样的数据表(不是我的表不能改数据)
Code Version Description
AAA 0.0.0.0 Test of AAA
AAA 0.0.0.1 Test of AAA
BBB 0.0.0.0 Test of BBB
CCC 0.0.0.0 Test of CCC
CCC 0.0.0.1 Test of CCC
我只想返回唯一的“代码”值列表。
所以我想要的结果是:
AAA Test of AAA
BBB Test of BBB
CCC Test of CCC
我创建了一个比较器类:
public class MyComparer : IEqualityComparer<MY_DATA_TABLE>
{
public bool Equals(MY_DATA_TABLE x, MY_DATA_TABLE y)
{
return x.CODE == y.CODE;
}
public int GetHashCode(MY_DATA_TABLE obj)
{
return obj.GetHashCode();
}
}
在我的代码中我有:
var mapCodes = (from mtc in GetAllData() select mtc)
.Distinct(new MyComparer ())
.ToList();
但是它仍然返回全部内容。
如何按属性获取不同的列表?
【问题讨论】:
-
不太可能是您的问题,但您的 GetHashCode 实现不正确。如果对象“相等”,HashCodes 应该匹配所以你想要
obj.Code.GetHashCode() -
如何实现按属性获取不同列表?通过正确实现
GetHashCode。 -
你可能想要来自 MoreLinq 的 DistinctBy 扩展