J'utilise C# sur Framework 3.5. Je cherche à regrouper rapidement une Generic List<> par deux propriétés. Dans le cadre de cet exemple, disons que j'ai une liste de type Commande avec les propriétés CustomerId, ProductId et ProductCount. Comment puis-je obtenir la somme des comptes de produits groupés par CustomerId et ProductId en utilisant une expression lambda ?
Réponses
Trop de publicités?
tlangdon
Points
195
Je me rends compte que ce fil de discussion est très ancien mais comme je viens de me battre avec cette syntaxe, j'ai pensé que je pourrais poster mes découvertes supplémentaires - vous pouvez retourner la somme et les ID (sans foreach) dans une requête comme ceci :
var sums = Orders
.GroupBy(x => new { x.CustomerID, x.ProductID })
.Select(group =>new {group.Key, ProductCount = group.Sum(x => x.ProductCount)});
La partie la plus délicate pour moi est que la somme doit être aliasée, apparemment...
Klas Mellbourn
Points
6771
Alternativement, si vous voulez obtenir les IDs pour chaque somme, vous pouvez faire ceci
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));
}
AnshuMan SrivAstav
Points
19