2013-04-27 11 views
12
ben aşağıdakileri yapmanız gereken

, ben 2 tamsayı kimliği ve ŞimdiLinq'da SUM nasıl edinilir?</p> <pre><code>get the sum of the count for each id </code></pre> <p>ama olan öğeler olabilir:

Aşağıdaki linq sorgusu yapmak istiyorum saymak içeren bir sınıf ile bir List var aynı kimliği, bu özetlenebilir; böylece örneğin:

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

olmak ruh:

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

bunu nasıl yaparsınız? her grupta Id tarafından

+0

101 LINQ Örnekler: http://code.msdn.microsoft.com/LINQ-Aggregate-Operators-c51b3869#CountConditional –

cevap

22

Group ürün ve ardından sumCount s:

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

Ben yeni kullanmak istemiyorsanız, yapmanız gerekiyor, sadece özetlemek ne yukarı ve sonra geri aldım nesneleri geri aldım – gurehbgui

+0

Sonuç olarak ne bekliyorsunuz? {Item = {id = 1, count = 12}, Sum = 14} 'gibi bir şey? – Caramiriel

+1

@Caramiriel Evet, orijinal öğelerle aynı türden yeni öğeler oluşturmak istiyor gibi görünüyor; sayıları toplamlar olarak ayarlanmış gibi: "var result = items.GroupBy (x => x.Id). Seçiniz (g => yeni HisType {id = g.Key, count = g.Sum (x => x.Count)}); ' –

3

Deneyin,

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

aşağıdaki program ...

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); 
     } 

    } 

} 

. ..prints:

1  14 
2  1 
İlgili konular