【发布时间】:2011-11-12 06:30:10
【问题描述】:
我有以下代码:
var foo = (from data in pivotedData.AsEnumerable()
select new
{
Group = data.Field<string>("Group_Number"),
Study = data.Field<string>("Study_Name")
}).Distinct();
正如预期的那样,这会返回不同的值。但是,我想要的是返回一个强类型集合而不是匿名类型,所以当我这样做时:
var foo = (from data in pivotedData.AsEnumerable()
select new BarObject
{
Group = data.Field<string>("Group_Number"),
Study = data.Field<string>("Study_Name")
}).Distinct();
这不会返回不同的值,而是将它们全部返回。有没有办法用实际对象做到这一点?
【问题讨论】:
-
在你的类型上实现
Equals()和GetHashCode()。 -
@dlev
GetHashCode应该做什么? -
@BrunoLM:例如阅读这个答案:stackoverflow.com/questions/6305324/… GetHashCode 应该在 Equals 也比较的所有字段上提供哈希码,并用于哈希表或字典以快速查找对象。
-
@Bruno Distinct 将尝试将每个对象放入哈希表中(并且将仅返回那些不存在的对象。)这意味着必须正确实现哈希码以确保相等的项目具有相同的哈希。否则,
Equals()(可能)不会被调用,因为对象可能散列到不同的存储桶。