关于c#:Lambda Distinct Select

Lambda Distinct Select

本问题已经有最佳答案,请猛点这里访问。

我有这个lambda,希望它返回不同的列表。

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

我是缺少什么,还是应该返回一个不同的列表?


如果不重写类中的EqualsGetHashCode,或者不提供自定义的相等比较器,Distinct方法将使用默认的相等比较器作为类型,并通过引用比较引用类型。不是由属性值决定的。如果不希望此行为覆盖类中的相关方法,或者如果无法更改类,请为该类型实现一个IEqualityComparer,并将其传递给Distinct

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

另一个快速解决方案是使用GroupBy

1
2
3
4
var ResourceTypeNameList = Resources
  .Select(r => new bl_SelectBox{ text=r.ResourceTypeName, value=r.resourceTypeID })
  .GroupBy(x => x.SomeProperty)
  .Select(x => x.First());