2013-03-08 93 views
0

我的文檔以下列表:分組在LINQ

List<DocumentInfo> list1 = new List<DocumentInfo>() 
{ 
    new DocumentInfo { Name = "Customer1", DocCount = 5 }, 
    new DocumentInfo { Name = "Customer1", DocCount = 10 }, 
    new DocumentInfo { Name = "Customer1", DocCount = 5 }, 
    new DocumentInfo { Name = "Customer2", DocCount = 4 }, 
    new DocumentInfo { Name = "Customer2", DocCount = 6 }, 
    new DocumentInfo { Name = "Customer3", DocCount = 3 } 
}; 

如何組根據「名稱」,而在另一個列表使用LINQ和存儲「DocCount」的總和上面的列表?我想是以下幾點:

Name = "Customer1", DocCount = 20 
Name = "Customer2", DocCount = 10 
Name = "Customer3", DocCount = 3 

回答

4
var results = list1.GroupBy(i => i.Name) 
        .Select(g => new 
           { 
            Name = g.Key, 
            DocCount = g.Sum(i => i.DocCount) 
           }); 
1
var list2 = list1.GroupBy(x => x.Name).Select(g => new DocumentInfo() 
             { 
              Name = g.Key, 
              DocCount = g.Sum(x => x.DocCount) 
             }); 
1

試試這個:

list1.GroupBy(di => di.Name).Select(g => new DocumentInfo {Name = g.Key, DocCount = g.Sum(dc => dc.DocCount)}); 
0

嘗試這樣;

var anotherlist = list1.GroupBy(g => g.Name) 
        .Select(s => new 
        { 
         Name = s.Key, 
         DocCount = s.Sum(i => i.DocCount) 
        }); 

它簡單地說,通過獲取的DocCount及其Name性能和基於分組Name

0
var result= from item in list1 
      group item by item.Name 
      into g 
      select g; 
var groupedInfo = result.SelectMany(group => group); 
foreach(var g in groupedInfo) 
{ 
    //Do Summation 
} 
0

這裏是另一種方式做同樣的

var sumOfDocs = from doc in list1 group doc by doc.Name into g 
       select new { DocName = g.Key, DocSum = g.Sum(i => i.DocCount) };