我有这个lambda并希望它返回Distinct列表。
var ResourceTypeNameList = Resources.Select(r => new bl_SelectBox{ text=r.ResourceTypeName, value=r.resourceTypeID }).Distinct();
我错过了什么或应该返回一个不同的列表?
答案 0 :(得分:10)
如果您没有覆盖类中的Equals
和GetHashCode
或提供自定义相等比较器Distinct
方法,则使用类型的默认相等比较器。它会通过引用比较引用类型。不是属性值。如果您不希望此行为覆盖您班级中的相关方法,或者您无法更改班级,请为该类型实施IEqualityComparer
并将其传递给Distinct
:
var ResourceTypeNameList = Resources
.Select(r => new bl_SelectBox{ text=r.ResourceTypeName, value=r.resourceTypeID })
.Distinct(new MyEqualityComparer());
另一个快速解决方案是使用GroupBy
:
var ResourceTypeNameList = Resources
.Select(r => new bl_SelectBox{ text=r.ResourceTypeName, value=r.resourceTypeID })
.GroupBy(x => x.SomeProperty)
.Select(x => x.First());