Distinct没有为表格提供明确的行
ObjectParameter statusCode = new ObjectParameter("StatusCode", typeof(int));
ObjectParameter statusMessage = new ObjectParameter("StatusMessage", typeof(string));
return Context.p_Countries_List(userName, statusCode, statusMessage)
.Select(c => new Countries_List_ResultModel()
{
currency = c.currency
}).Distinct().ToList();
答案 0 :(得分:1)
您必须覆盖Equals
,以便Distinct
知道如何告诉另一个实例。
public class Countries_List_ResultModel
{
public override bool Equals(object obj)
{
var item = obj as Countries_List_ResultModel;
if (item == null)
{
return false;
}
return true; // Add the appropriate logic.
}
public override int GetHashCode()
{
// Return the hashcode to quickly identify different instances.
return this.currency.GetHashCode();
}
}
更多信息here。
答案 1 :(得分:0)
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();
}
}
答案 2 :(得分:-1)
我找到了答案,这是有效的。
ObjectParameter statusCode = new ObjectParameter("StatusCode", typeof(int));
ObjectParameter statusMessage = new ObjectParameter("StatusMessage", typeof(string));
return Context.p_Currencies_List(userName, statusCode, statusMessage).Distinct().Select(c => new Countries_List_ResultModel()
{
currency = c
}).ToList();