2013-03-08 62 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) };