Lambda 不同 Select
Lambda Distinct Select
我有这个 lambda 并且想要它到 return 不同的列表。
var ResourceTypeNameList = Resources.Select(r => new bl_SelectBox{ text=r.ResourceTypeName, value=r.resourceTypeID }).Distinct();
我是不是遗漏了什么或者应该 return 一个不同的列表?
如果您不覆盖 class 中的 Equals
和 GetHashCode
或提供自定义相等比较器 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());
我有这个 lambda 并且想要它到 return 不同的列表。
var ResourceTypeNameList = Resources.Select(r => new bl_SelectBox{ text=r.ResourceTypeName, value=r.resourceTypeID }).Distinct();
我是不是遗漏了什么或者应该 return 一个不同的列表?
如果您不覆盖 class 中的 Equals
和 GetHashCode
或提供自定义相等比较器 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());