先添加类继承至IEqualityComparer
-
public class CommonEqualityComparer<T, V> : IEqualityComparer<T>
-
{
-
private Func<T, V> keySelector;
-
private IEqualityComparer<V> comparer;
-
-
public CommonEqualityComparer(Func<T, V> keySelector, IEqualityComparer<V> comparer)
-
{
-
this.keySelector = keySelector;
-
this.comparer = comparer;
-
}
-
-
public CommonEqualityComparer(Func<T, V> keySelector)
-
: this(keySelector, EqualityComparer<V>.Default)
-
{ }
-
-
public bool Equals(T x, T y)
-
{
-
return comparer.Equals(keySelector(x), keySelector(y));
-
}
-
-
public int GetHashCode(T obj)
-
{
-
return comparer.GetHashCode(keySelector(obj));
-
}
-
}
添加扩展方法
-
public static class CommonFunction
-
{
-
/// <summary>
-
/// 扩展Distinct方法
-
/// </summary>
-
/// <typeparam name=\"T\">源类型</typeparam>
-
/// <typeparam name=\"V\">委托返回类型(根据V类型,排除重复项)</typeparam>
-
/// <param name=\"source\">扩展源</param>
-
/// <param name=\"keySelector\">委托(执行操作)</param>
-
/// <returns></returns>
-
public static IEnumerable<T> Distinct<T, V>(this IEnumerable<T> source, Func<T, V> keySelector)
-
{
-
return source.Distinct(new CommonEqualityComparer<T, V>(keySelector));
-
}
-
}
可以直接进行调用,根据Domain中的字段进行筛选
-
IList<ScoredSuppliers> scoredSuppliers =
-
list.Where(s => s.Region == region).ToList().Distinct(c => new { ScoredSupplierId = c.ScoredSupplierId, Type = c.Type }).OrderBy(s=>s.Type).ToList()
由于匿名类型上的 Equals 和 GetHashCode 方法是根据属性的 Equals 和 GetHashcode 定义的,因此仅当同一匿名类型的两个实例的所有属性都相等时,这两个实例才相等。
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/29395669/viewspace-1064028/
,如需转载,请注明出处,否则将追究法律责任。