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