2013-04-27 34 views
12

我需要做到以下几点,我有一个List与包含2个整数ID和计数如何在Linq中获得SUM?

现在我想做到以下几点LINQ查询类:

get the sum of the count for each id 

但可以有与项目相同的ID,所以应该summerized如:

id=1, count=12 
id=2, count=1 
id=1, count=2 

是前人的精力:

id=1 -> sum 14 
id=2 -> sum 1 

该怎么做?

+0

101 LINQ示例:http://code.msdn.microsoft.com/LINQ-Aggregate-Operators-c51b3869#CountConditional – 2013-04-27 10:35:39

回答

22

Group项目由Id,然后sumCount s各自组中:

var result = items.GroupBy(x => x.Id) 
        .Select(g => new { Id = g.Key, Sum = g.Sum(x => x.Count) }); 
+0

我有什么做的,如果我不想使用新的,只是来概括然后拿回我有的东西 – gurehbgui 2013-04-27 10:41:12

+0

你期待的结果是什么?类似于“{Item = {id = 1,count = 12},Sum = 14}'? – Caramiriel 2013-04-27 10:46:56

+1

@Caramiriel是的,它看起来好像他想创建与原始元素相同类型的新项目,其计数设置为总计,如:var result = items.GroupBy(x => x.Id)。选择(g => new HisType {id = g.Key,count = g.Sum(x => x.Count)});' – 2013-04-27 12:09:18

3

试试吧,

.GroupBy(x => x.id) 
.Select(n => n.Sum(m => m.count)); 
1

下面的程序...

struct Item { 
    public int Id; 
    public int Count; 
} 

class Program { 

    static void Main(string[] args) { 

     var items = new [] { 
      new Item { Id = 1, Count = 12 }, 
      new Item { Id = 2, Count = 1 }, 
      new Item { Id = 1, Count = 2 } 
     }; 

     var results = 
      from item in items 
      group item by item.Id 
      into g 
      select new { Id = g.Key, Count = g.Sum(item => item.Count) }; 

     foreach (var result in results) { 
      Console.Write(result.Id); 
      Console.Write("\t"); 
      Console.WriteLine(result.Count); 
     } 

    } 

} 

。 ..打印:

1  14 
2  1