LINQ Aggregate 取集合中连续递增记录

原文:http://blog.csdn.net/q107770540/article/details/6625243

需求:


例如
A B C
----------
1 1 a
1 2 a
1 3 a   
1 4 b
1 5 a
2 6 a
2 7 b
2 8 b

得出结果: 要A.C相同 ,B连续递增

A B C
----------
1 1 a
1 2 a
1 3 a   
2 7 b
2 8 b  

实现代码:


[csharp]  view plain copy
  1. void Main()  
  2. {  
  3.   
  4.   var list=new List<temp>  
  5.     {  
  6.      new temp{ A=1, B=1, C="a"},  
  7.      new temp{ A=1, B=2, C="a"},  
  8.      new temp{ A=1, B=3, C="a"},  
  9.      new temp{ A=1, B=4, C="b"},  
  10.      new temp{ A=1, B=5, C="a"},  
  11.      new temp{ A=2, B=6, C="a"},  
  12.      new temp{ A=2, B=7, C="b"},  
  13.      new temp{ A=2, B=8, C="b"}  
  14.     };  
  15.      var result= new List<temp>();  
  16.     var query=list.Aggregate((m,n)=>  
  17.     {  
  18.       if(m.A ==n.A && m.C==n.C)  
  19.       {  
  20.         if(m.B==n.B-1)  
  21.         {  
  22.         result.Add(m);  
  23.         result.Add(n);  
  24.          return n;  
  25.          }  
  26.          else  
  27.          {  
  28.            return m;  
  29.          }  
  30.       }  
  31.      else{return n;}  
  32.     }  
  33.     );  
  34.     Console.WriteLine("A\tB\tC");  
  35.     result.Distinct().ToList().ForEach(r=>Console.WriteLine("{0}\t{1}\t{2}",r.A,r.B,r.C));  
  36.      /* 
  37.      A    B    C 
  38.     1    1    a 
  39.     1    2    a 
  40.     1    3    a 
  41.     2    7    b 
  42.     2    8    b  
  43.      */  
  44. }  
  45. class temp  
  46. {  
  47.   public int A{get;set;}  
  48.   public int B{get;set;}  
  49.   public string C{get;set;}  
  50. }  
http://msdn.microsoft.com/zh-cn/library/bb548651(v=vs.110).aspx

你可能感兴趣的:(LINQ Aggregate 取集合中连续递增记录)