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

Как группировать выше список, основанный на «Имя» и суммы «DocCount» с помощью Linq и хранить в другом списке? Я хочу что-то вроде следующего:

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) }; 
Смежные вопросы