我有这个lambda表达式,想让它返回一个不重复的列表。
var ResourceTypeNameList = Resources.Select(r => new bl_SelectBox{ text=r.ResourceTypeName, value=r.resourceTypeID }).Distinct();
我有点不确定,但是这个应该返回一个不同的列表吧?
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());
bl_SelectBox
是否覆盖了GetHashCode
和Equals
方法?如果没有,尝试实现它们,或者给Distinct
方法添加一个实现IEqualityComparer<bl_SelectBox>
接口的额外参数。 - Caramiriel