counter
counter

泛型去重复项

转载:http://kb.cnblogs.com/a/2177118/    http://topic.csdn.net/u/20110803/16/031363d0-831d-4795-8c29-458d1271cc83.html?48229

ID Name
1  张三
1  李三
1  小伟
1  李三 
2  李四
2  李武

------------------------------------------------------------------------------------------------------------

解决这个问题,方法很多,最开始想到的就Enumerable.Distinct方法

我们可能经常用的Distinct<TSource>(IEnumerable<TSource>)

这里要用Distinct<TSource>(IEnumerable<TSource>, IEqualityComparer<TSource>) 使用指定的 IEqualityComparer<T> 对值进行比较

 

 一、先为数据做个实体类:User

 

  1. public class User  
  2. {  
  3.      public User(int id, string name)  
  4.      {  
  5.          Id = id;  
  6.          Name = name;  
  7.      }  
  8.   
  9.      public int Id { getset; }  
  10.   
  11.      public string Name { getset; }  
  12.  }  

 

二、再自定义一个User比较类(实现IEqualityComparer<T>接口):UserComparer

 

 

  1. public class UserComparer : IEqualityComparer<User>  
  2. {  
  3.     #region IEqualityComparer<User> 成员   
  4.     public bool Equals(User x, User y)  
  5.     {  
  6.         if (x.Id == y.Id && x.Name == y.Name)         
  7.             return true;           
  8.         else             
  9.             return false;             
  10.     }  
  11.   
  12.     public int GetHashCode(User obj)  
  13.     {  
  14.         return 0;  
  15.     }  
  16.     #endregion   
  17. }  

 

三、最后是去重复测式类:

 

 

    1.  public class MainClass  
    2.  {  
    3.     public static void Main()  
    4.     {  
    5.         List<User> list = new List<User>();  
    6.         list.Add(new User(1, "张三"));  
    7.         list.Add(new User(1, "李三"));  
    8.         list.Add(new User(1, "小伟"));  
    9.         list.Add(new User(1, "李三"));  
    10.         list.Add(new User(2, "李四"));  
    11.         list.Add(new User(2, "李武"));  
    12.   
    13.         var query = list.Distinct(new UserComparer());  
    14.   
    15.         foreach (var item in query)  
    16.         {  
    17.             Console.WriteLine(item.Id + "," + item.Name);  
    18.         }  
    19.   
    20.         Console.ReadLine();  
    21.         //输出结果:  
    22.         // 1 , 张三  
    23.         // 1 , 李三  
    24.         // 1 , 小伟                  
    25.         // 2 , 李四  
    26.         // 2 , 李武  
    27.     }  
    28. }  
posted @ 2012-08-01 18:54  bfy  阅读(450)  评论(0编辑  收藏  举报