所以在控制器中,我接受一个对象列表如下:
public virtual ActionResult Grid_Read([DataSourceRequest]DataSourceRequest request, IEnumerable<ObjDTO> objects)
{
var DistinctList = objects.Distinct();
return Json(DistinctList.ToDataSourceResult(request), JsonRequestBehavior.AllowGet);
}
但是.Distinct()对列表没有任何作用。
答案 0 :(得分:-3)
因此,为了解决此问题,您需要导航到用作类型的DTO,在本例中为“ObjDTO&#39;”。您需要创建自定义相等比较器。
我使用以下代码制作这个比较器:
public string Item1 {get;set;}
public int Item2 {get;set;}
public override bool Equals(object obj)
{
var item = obj as ObjDTO;
if (item == null)
{
return false;
}
return this.Item1 == item.Item1 && this.Item2 == item.Item2;
}
public override int GetHashCode()
{
if (this.Item1 == null && this.Item2 == 0)
{
return base.GetHashCode();
}
return this.Item1.GetHashCode() + this.Item2.GetHashCode();
}
因此,distinct不起作用的原因是因为被接受的DTO中的每个对象都有一个唯一的哈希码,这是不可见的。因此,考虑到这一点,我们的自定义比较器负责比较对象中的值,然后组合哈希码并返回。
这为我们提供了具有唯一哈希码的不同值的列表。