Linq to get distinct property
本问题已经有最佳答案,请猛点这里访问。
我有一个这样的数据表(不是我的表不能更改数据)
1 2 3 4 5 6 | 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 |
我只想返回唯一"代码"值的列表。所以我想要的结果是:
1 2 3 | AAA Test of AAA BBB Test of BBB CCC Test of CCC |
我创建了一个比较器类:
1 2 3 4 5 6 7 8 9 10 11 12 | 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(); } } |
在我的代码中,我有:
1 2 3 |
但是,它仍然返回整个内容。
我如何才能按属性获得一个不同的列表?
另一种选择是,如果
1 2 3 | var mapCodes = (from mtc in GetAllData() group mtc by mtc.Code into grp select grp.First()).ToList(); |
你可以用morelinq的distinctby
1 2 | var mapCodes = (from mtc in GetAllData() select mtc).DistinctBy(x=>x.Code).ToList(); |
或者只是:
1 | var mapCodes = GetAllData().DistinctBy(x=>x.Code).ToList(); |
或者您可以按照注释中的说明更正gethashcode方法。
重写您的
1 2 3 4 | public int GetHashCode(MY_DATA_TABLE obj) { return obj.CODE.GetHashCode(); } |
规则是,equals和