列表自定义去重
去重一般首先想到的就是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、有时候去重要根据当时的条件,下面是多条件去重