首頁 >後端開發 >C++ >如何正確使用LINQ的GroupBy、Sum、Count來聚合產品資料?

如何正確使用LINQ的GroupBy、Sum、Count來聚合產品資料?

Linda Hamilton
Linda Hamilton原創
2025-01-24 16:56:13293瀏覽

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

LINQ:GroupBy、Sum與Count

問題描述

您有一組產品數據,需要依照產品代碼分組。對於每個代碼,您希望傳回一個包含產品名稱、產品數量和總價格的物件。您正在使用LINQ的GroupBy和SelectMany函數來實現此目標,但是結果物件中的數量屬性始終為1。

問題在於SelectMany函數用於處理每個組中的每一項。若要解決此問題,請使用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>

替代方案

或者,您可以同時按產品名稱和產品代碼進行分組,如果給定代碼的名稱始終相同,則會得到相同的結果。這可以在EF中產生更好的SQL:

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

改進資料型別

考慮將Quantity和Price屬性分別改為int和decimal類型,因為這更能反映這些值的性質。

以上是如何正確使用LINQ的GroupBy、Sum、Count來聚合產品資料?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn