Maison > développement back-end > C++ > Comment grouper correctement, résumer et compter les produits dans LINQ avec Groupby?

Comment grouper correctement, résumer et compter les produits dans LINQ avec Groupby?

Patricia Arquette
Libérer: 2025-01-24 17:01:09
original
848 Les gens l'ont consulté

How to Correctly Group, Sum, and Count Products in LINQ with GroupBy?

Regrouper, additionner et compter les produits à l'aide de LINQ : méthode GroupBy

Description du problème

Nous avons une collection de produits qui doivent être regroupés par code produit. L'objectif est de créer un objet contenant le nom du produit, la quantité du produit et le prix total pour chaque code produit.

Extrait de code (exemple d'erreur)

Le code initial utilise GroupBy pour regrouper par code produit puis calculer la somme et compter pour chaque groupe.

<code class="language-csharp">List<resultline> result = Lines
    .GroupBy(l => l.ProductCode)
    .SelectMany(cl => cl.Select(
        csLine => new ResultLine
        {
            ProductName = csLine.Name,
            Quantity = cl.Count().ToString(),
            Price = cl.Sum(c => c.Price).ToString(),
        })).ToList<resultline>();</code>
Copier après la connexion

Le problème

Bien que ce code calcule correctement la somme, le décompte de tous les produits indique toujours 1.

Exemples de données

<code class="language-csharp">List<cartline> Lines = new List<cartline>();
Lines.Add(new CartLine() { ProductCode = "p1", Price = 6.5M, Name = "Product1" });
Lines.Add(new CartLine() { ProductCode = "p1", Price = 6.5M, Name = "Product1" });
Lines.Add(new CartLine() { ProductCode = "p2", Price = 12M, Name = "Product2" });</code>
Copier après la connexion

Résultats attendus

<code>Product1: count 2   - Price:13 (2x6.5)
Product2: count 1   - Price:12 (1x12)</code>
Copier après la connexion

Solution

Le problème est d'utiliser SelectMany pour vérifier chaque élément de chaque groupe. La bonne approche est :

<code class="language-csharp">List<resultline> result = Lines
    .GroupBy(l => l.ProductCode)
    .Select(cl => new ResultLine
    {
        ProductName = cl.First().Name,
        Quantity = cl.Count().ToString(),
        Price = cl.Sum(c => c.Price).ToString(),
    }).ToList();</code>
Copier après la connexion

En supposant que les produits avec le même code portent le même nom, nous pouvons utiliser First() pour obtenir le nom du produit. SelectMany aplatit l'ensemble de résultats, provoquant des erreurs de comptage, tandis que Select opère directement sur les résultats groupés.

Cette réponse révisée conserve l'image et fournit une explication plus précise et concise du problème et de la solution LINQ. La formulation est également ajustée pour améliorer la clarté et la fluidité.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal