2008-12-12 14 views
33

Framework 3.5 üzerinde C# kullanıyorum. Genel özellikler <> iki özellik tarafından hızlı bir şekilde gruplandırmaya çalışıyorum. Bu örnek için, CustomerId, ProductId ve ProductCount özelliklerine sahip bir Sipariş Türü Listem olduğunu söyleyeyim. Bir lambda ifadesi kullanarak CustomerId ve ProductId tarafından gruplandırılmış ProductCounts toplamını nasıl alabilirim? Her toplamı için kimliklerini almak istiyorsanızC# Liste <> GroupBy 2 Değerleri

cevap

56
var sums = Orders.GroupBy(x => new { x.CustomerID, x.ProductID }) 
       .Select(group => group.Sum(x => x.ProductCount)); 
7

Alternatif olarak, bu iş parçacığı çok eskidir ama sadece bu sözdizimi ile mücadele beri ben düşünce fark bu

var customerAndProductGroups = 
    from order in Orders 
    orderby order.CustomerID, order.ProductID // orderby not necessary, but neater 
    group order by new { order.CustomerID, order.ProductID }; 

foreach (var customerAndProductGroup in customerAndProductGroups) 
{ 
    Console.WriteLine("Customer {0} has ordered product {1} for a total count of {2}", 
     customerAndProductGroup.Key.CustomerID, 
     customerAndProductGroup.Key.ProductID, 
     customerAndProductGroup.Sum(item => item.ProductCount)); 
} 
16

yapabilirdi benim ilave bulgular sonrası d - bu kadar gibi bir sorguda (foreach w/o) toplamı ve kimlikleri dönebilirsiniz:

var sums = Orders 
      .GroupBy(x => new { x.CustomerID, x.ProductID }) 
      .Select(group =>new {group.Key, ProductCount = group.Sum(x => x.ProductCount)}); 

zor kısmı beni Çalıştırmak için toplamı ad verilmiş gerektiğidir, görünüşte ...

+0

Bu cevabın çok eski olduğunu anlıyorum, ancak birisi takma adın neden gerekli olduğunu merak ederse, özellikler örtülü alan adları oluşturuyor ancak yöntemler kullanılmıyor. – Jimmy

-1

var New1 = EmpList.GroupBy (z => z.Age) .OrderBy (Çalışan => Çalışanı.Key);

dataGridView1.DataSource = New1;

+0

Bu cevap, soru için geçerli görünmüyor. – Bryan

İlgili konular