linq group by 多列值 实现

来源:互联网 发布:2016淘宝客好做吗 编辑:程序博客网 时间:2024/05/18 02:38
 场景是:
view plaincopy to clipboardprint?
  1. //这么一个LIST, 最终想得到的结果如下:   
  2. List<TestData> list = new List<TestData>();  
  3.             list.Add(new TestData() {  Name="A", Count=3,BatNum="001"});  
  4.             list.Add(new TestData() { Name = "A", Count = 3,BatNum="001" });  
  5.             list.Add(new TestData() { Name = "A", Count = 3, BatNum = "002" });  
  6.             list.Add(new TestData() { Name = "b", Count = 3, BatNum = "001" });  
  7.             list.Add(new TestData() { Name = "b", Count = 6, BatNum = "002" });  
  8.             list.Add(new TestData() { Name = "b", Count = 3, BatNum = "003" });  
  9.             list.Add(new TestData() { Name = "b", Count = 5, BatNum = "001" });  
 

最后结果:
 Name="A", Count=6,BatNum="001"
 Name="A", Count=3,BatNum="002"
 Name="b", Count=8,BatNum="001"
 Name="b", Count=6,BatNum="002"
 Name="b", Count=3,BatNum="003"

实现:

view plaincopy to clipboardprint?
  1.  public class TestData  
  2.     {  
  3.         public string Name{get;set;}  
  4.         public int Count { getset; }  
  5.         public string BatNum { getset; }  
  6.     }  
  7.  protected void Click(object sender, EventArgs e)  
  8.     {  
  9.         List<TestData> list = new List<TestData>();  
  10.         list.Add(new TestData() { Name = "A", Count = 3, BatNum = "001" });  
  11.         list.Add(new TestData() { Name = "A", Count = 3, BatNum = "001" });  
  12.         list.Add(new TestData() { Name = "A", Count = 3, BatNum = "002" });  
  13.         list.Add(new TestData() { Name = "b", Count = 3, BatNum = "001" });  
  14.         list.Add(new TestData() { Name = "b", Count = 6, BatNum = "002" });  
  15.         list.Add(new TestData() { Name = "b", Count = 3, BatNum = "003" });  
  16.         list.Add(new TestData() { Name = "b", Count = 5, BatNum = "001" });  
  17.         var query = from l in list  
  18.                     group l by new { l.Name, l.BatNum } into g  
  19.                     select new  
  20.                     {  
  21.                         Name = g.Key.Name,  
  22.                         Count = g.Sum(a => a.Count),  
  23.                         BatNum = g.Key.BatNum  
  24.                     };  
  25.         string result = "";  
  26.         foreach (var q in query)  
  27.         {  
  28.             result += "Name=/"" + q.Name + "/"," + "Count=/"" + q.Count + "/"," + "BatNum=/"" + q.BatNum + " /"<br />";  
  29.         }  
  30.         Response.Write(result);  
  31.     }  
  32.  //结果:   
  33. Name="A",Count="6",BatNum="001 "  
  34. Name="A",Count="3",BatNum="002 "  
  35. Name="b",Count="8",BatNum="001 "  
  36. Name="b",Count="6",BatNum="002 "  

原创粉丝点击