Lambda 不同 Select

Lambda Distinct Select

我有这个 lambda 并且想要它到 return 不同的列表。

var ResourceTypeNameList = Resources.Select(r => new bl_SelectBox{ text=r.ResourceTypeName, value=r.resourceTypeID }).Distinct();

我是不是遗漏了什么或者应该 return 一个不同的列表?

如果您不覆盖 class 中的 EqualsGetHashCode 或提供自定义相等比较器 Distinct 方法使用默认相等比较器 type.And 它通过引用比较引用类型。不是 属性 值。如果您不希望出现这种行为,请覆盖 class 中的相关方法,或者如果您无法更改 class ,则为该类型实现一个 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());