你如何在一个对象数组上调用.Distinct()

时间:2018-03-20 17:31:34

标签: c# model-view-controller

所以在控制器中,我接受一个对象列表如下:

    public virtual ActionResult Grid_Read([DataSourceRequest]DataSourceRequest request, IEnumerable<ObjDTO> objects)
    {
         var DistinctList = objects.Distinct();

         return Json(DistinctList.ToDataSourceResult(request), JsonRequestBehavior.AllowGet);
    }

但是.Distinct()对列表没有任何作用。

1 个答案:

答案 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中的每个对象都有一个唯一的哈希码,这是不可见的。因此,考虑到这一点,我们的自定义比较器负责比较对象中的值,然后组合哈希码并返回。

这为我们提供了具有唯一哈希码的不同值的列表。