【发布时间】:2011-11-18 03:35:08
【问题描述】:
当使用查询运算符 Distinct() 时,查询序列中的类型必须提供合适的 GetHashCode() 和 Equals() 重载,或者您必须传递 IEqualityComparer
我的问题:为什么 Distinct() 没有过载接受委托实例(例如比较
【问题讨论】:
-
Distinct 将检查 Equals 和 GetHashCode 如果必须...您认为您实际上能够提供多轻的 lambda?
-
嗨 ErOx!我建议了一个像 Tor Haugen 在 Distinct() 中提出的解决方案 with lambda?: var distinctValues = myCustomerList.Distinct((c1, c2) => c1.CustomerId == c2.CustomerId);嗨马格努斯!嗯,我没有找到 Tor 的问题,所以我的问题是重复的,是的!感谢您的 cmets!
-
但这只有在您想要考虑的唯一事情是单个属性时才有效……这通常不是某人想要的。但是,如果这是您想要的,那么我会说 Jon Skeet 的答案和实现是要走的路(即 DistinctBy(x => x.PropertyName)
-
是的,我知道 Jon 的 DistinctBy(),也许真正的问题是,为什么它作为标准查询运算符不存在(解释 SLaks 的答案)。但是很多时候你想比较单个项目(我认为,这是一个典型案例。)。
标签: linq linq-to-objects distinct iequalitycomparer