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 ?
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!