Lambda Distinct Select

时间:2015-01-27 15:17:10

标签: c# linq lambda

我有这个lambda并希望它返回Distinct列表。

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

我错过了什么或应该返回一个不同的列表?

1 个答案:

答案 0 :(得分:10)

如果您没有覆盖类中的EqualsGetHashCode或提供自定义相等比较器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());