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
Linda Hamiltonoriginal
2025-01-24 16:56:13289parcourir

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>

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>

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!

Déclaration:
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