先添加类继承至IEqualityComparer
添加扩展方法
可以直接进行调用,根据Domain中的字段进行筛选
由于匿名类型上的
Equals 和
GetHashCode 方法是根据属性的
Equals 和
GetHashcode 定义的,因此仅当同一匿名类型的两个实例的所有属性都相等时,这两个实例才相等。
点击(此处)折叠或打开
- 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));
- }
- }
点击(此处)折叠或打开
- IList<ScoredSuppliers> scoredSuppliers =
- list.Where(s => s.Region == region).ToList().Distinct(c => new { ScoredSupplierId = c.ScoredSupplierId, Type = c.Type }).OrderBy(s=>s.Type).ToList()
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/29395669/viewspace-1064028/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/29395669/viewspace-1064028/