去重一般首先想到的就是distinct,但是,对于复杂类型的对象来说,distinct是达不到去重的效果的,例如subject有Id和Name两个属性的时候,distinct就去不了重。
下面来介绍一个类,通过他来重写比较器,来实现自定义去重。
public class ListComparer<T> : IEqualityComparer<T>
{
public delegate bool EqualsComparer<F>(F x, F y);
public EqualsComparer<T> equalsComparer;
public ListComparer(EqualsComparer<T> _euqlsComparer)
{
this.equalsComparer = _euqlsComparer;
}
public bool Equals(T x, T y)
{
if (null != equalsComparer)
{
return equalsComparer(x, y);
}
else
{
return false;
}
}
public int GetHashCode(T obj)
{
return obj.ToString().GetHashCode();
}
}
查询到的list,只需
list=list.ToList().Distinct(new ListComparer<SearchConditionDto>((p1, p2) => p1.Id == p2.Id)).ToList();
就可以实现去重了。
示例:
1、根据Id去重
2、有时候去重要根据当时的条件,下面是多条件去重