有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