有Distinct
方法的两个重载:
Distinct<TSource>(this IEnumerable<TSource> source);
Distinct<TSource>(this IEnumerable<TSource> source, IEqualityComparer<TSource> comparer);
显然,您所使用的使用默认的相等比较器对值进行比较的第一个。引用类型的默认相等比较器通过引用来比较它们,这就是为什么所有new Countries_List_ResultModel
对于比较器都不相同的原因。 您可以创建自己的自定义比较器来检查currency
的等同性,并使用以IEqualityComparer<TSource> comparer
作为参数的超载。
return Context.p_Countries_List(userName, statusCode, statusMessage)
.Select(c => new Countries_List_ResultModel()
{
currency = c.currency
}).Distinct(new MyCustomComparer()).ToList();
public class MyCustomComparer : IEqualityComparer<Countries_List_ResultModel>
{
public bool Equals(Countries_List_ResultModel x, Countries_List_ResultModel y)
{
if (x == y) return true;
if (x == null || y == null) return false;
return x.currency == y.currency;
}
public int GetHashCode(Countries_List_ResultModel obj)
{
if (obj == null) return 0;
return obj.currency.GetHashCode();
}
}
....那命名约定,为什么你放弃标准的C#之一? :) –
'货币'是唯一设置的属性? – Andrew