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

先添加类继承至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.         }
可以直接进行调用,根据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()
由于匿名类型上的 EqualsGetHashCode 方法是根据属性的 EqualsGetHashcode 定义的,因此仅当同一匿名类型的两个实例的所有属性都相等时,这两个实例才相等。

 

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/29395669/viewspace-1064028/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/29395669/viewspace-1064028/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值