ITPub博客

首页 > 应用开发 > IT综合 > 根据list集合中的多个属性进行筛选-扩展Distinct方法

根据list集合中的多个属性进行筛选-扩展Distinct方法

原创 IT综合 作者:huxiaol 时间:2013-12-23 11:23:47 0 删除 编辑
先添加类继承至IEqualityComparer

点击(此处)折叠或打开

  1. public class CommonEqualityComparer<T, V> : IEqualityComparer<T>
  2.     {
  3.         private Func<T, V> keySelector;
  4.         private IEqualityComparer<V> comparer;

  5.         public CommonEqualityComparer(Func<T, V> keySelector, IEqualityComparer<V> comparer)
  6.         {
  7.             this.keySelector = keySelector;
  8.             this.comparer = comparer;
  9.         }

  10.         public CommonEqualityComparer(Func<T, V> keySelector)
  11.             : this(keySelector, EqualityComparer<V>.Default)
  12.         { }

  13.         public bool Equals(T x, T y)
  14.         {
  15.             return comparer.Equals(keySelector(x), keySelector(y));
  16.         }

  17.         public int GetHashCode(T obj)
  18.         {
  19.             return comparer.GetHashCode(keySelector(obj));
  20.         }
  21.     }
添加扩展方法

点击(此处)折叠或打开

  1. public static class CommonFunction
  2.     {
  3.         /// <summary>
  4.         /// 扩展Distinct方法
  5.         /// </summary>
  6.         /// <typeparam name=\"T\">源类型</typeparam>
  7.         /// <typeparam name=\"V\">委托返回类型(根据V类型,排除重复项)</typeparam>
  8.         /// <param name=\"source\">扩展源</param>
  9.         /// <param name=\"keySelector\">委托(执行操作)</param>
  10.         /// <returns></returns>
  11.         public static IEnumerable<T> Distinct<T, V>(this IEnumerable<T> source, Func<T, V> keySelector)
  12.         {
  13.             return source.Distinct(new CommonEqualityComparer<T, V>(keySelector));
  14.         }
  15. }
可以直接进行调用,根据Domain中的字段进行筛选

点击(此处)折叠或打开

  1. IList<ScoredSuppliers> scoredSuppliers =
  2.                 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/ ,如需转载,请注明出处,否则将追究法律责任。

上一篇: Metro之HelloWorld
请登录后发表评论 登录
全部评论

注册时间:2013-12-19

  • 博文量
    8
  • 访问量
    46010