34 votes

C# List<> GroupBy 2 Valeurs

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 ?

57voto

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

16voto

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...

7voto

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

-1voto

Var New1 = EmpList.GroupBy(z => z.Age).OrderBy(Employee => Employee.Key) ;

dataGridView1.DataSource = New1 ;

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X