Ich verwende C# auf Framework 3.5. Ich möchte eine generische Liste <> um zwei Eigenschaften gruppieren. Für dieses Beispiel nehmen wir an, dass ich eine Liste eines Auftragstyps mit Eigenschaften von CustomerId, ProductId und ProductCount habe. Wie bekomme ich die Summe der ProductCounts, gruppiert nach CustomerId und ProductId, mithilfe eines Lambda-Ausdrucks?C# List <> GroupBy 2 Werte
Antwort
var sums = Orders.GroupBy(x => new { x.CustomerID, x.ProductID })
.Select(group => group.Sum(x => x.ProductCount));
Alternativ, wenn Sie die IDs für jede Summe erhalten möchten, können Sie tun, um diese
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));
}
Ich weiß, das Gewinde sehr alt, aber da ich gerade durch diese Syntax kämpfte ich dachte, dass ich d meine zusätzliche Erkenntnisse veröffentlichen - in einer Abfrage wie so dass Sie die Summe und die IDs zurückgeben können (w/o foreach):
var sums = Orders
.GroupBy(x => new { x.CustomerID, x.ProductID })
.Select(group =>new {group.Key, ProductCount = group.Sum(x => x.ProductCount)});
der schwierige Teil für mich arbeiten zu lassen, ist, dass die Summe aliased werden muß, anscheinend ...
var New1 = EmpList.GroupBy (z => z.Age) .OrderBy (Mitarbeiter => Mitarbeiter.Key);
dataGridView1.DataSource = Neu1;
Diese Antwort scheint nicht auf die Frage zutreffen. – Bryan
Ich weiß, dass diese Antwort sehr alt ist, aber wenn jemand sich fragt, warum der Alias notwendig ist, erzeugen Eigenschaften implizite Feldnamen, aber Methoden nicht. – Jimmy