Lambda Distinct Select

Rud*_*man 2 c# linq lambda

我有这个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

如果不覆盖EqualsGetHashCode在类中或提供自定义相等比较器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)