Maison > développement back-end > C++ > Comment utiliser correctement les éléments GroupBy, Sum et Count de LINQ pour agréger les données produit ?

Comment utiliser correctement les éléments GroupBy, Sum et Count de LINQ pour agréger les données produit ?

Linda Hamilton
Libérer: 2025-01-24 16:56:13
original
287 Les gens l'ont consulté

How to Correctly Use LINQ's GroupBy, Sum, and Count to Aggregate Product Data?

LINQ : GroupBy, Somme et Compte

Description du problème

Vous disposez d'un ensemble de données produit qui doivent être regroupées par code produit. Pour chaque balise, vous souhaitez renvoyer un objet contenant le nom du produit, la quantité du produit et le prix total. Vous utilisez les fonctions GroupBy et SelectMany de LINQ pour y parvenir, mais la propriété quantitative dans l'objet résultant est toujours 1.

Solution

Le problème est que la fonction SelectMany est utilisée pour traiter chaque élément de chaque groupe. Pour résoudre ce problème, utilisez plutôt Select.

<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

Alternatives

Vous pouvez également regrouper à la fois par nom de produit et par code de produit, et vous obtiendrez les mêmes résultats si le nom d'un code donné est toujours le même. Cela génère un meilleur SQL dans EF :

<code class="language-csharp">List<resultline> result = Lines
    .GroupBy(l => new { l.ProductCode, l.Name })
    .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

Améliorer les types de données

Envisagez de modifier les propriétés Quantity et Price respectivement en types int et décimal, car cela reflète mieux la nature de ces valeurs.

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