首頁 > 後端開發 > C++ > 如何與Groupby正確分組,總和和計數產品?

如何與Groupby正確分組,總和和計數產品?

Patricia Arquette
發布: 2025-01-24 17:01:09
原創
799 人瀏覽過

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

使用LINQ將產品分組、求和與計數:GroupBy方法

問題描述

我們有一個產品集合,需要依照產品代碼分組。目標是建立一個對象,包含每個產品代碼的產品名稱、產品數量和總價格。

程式碼片段 (錯誤範例)

最初的程式碼使用GroupBy按產品代碼分組,然後計算每個組的總和和計數。

<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>
登入後複製

問題所在

這段程式碼雖然正確計算了總和,但所有產品的計數都始終顯示為1。

範例資料

<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>
登入後複製

預期結果

<code>Product1: count 2   - Price:13 (2x6.5)
Product2: count 1   - Price:12 (1x12)</code>
登入後複製

問題在於使用了SelectMany來檢查每個組別中的每個項目。 正確的做法是:

<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>
登入後複製

假設相同程式碼的產品具有相同的名稱,我們可以使用First()來取得產品名稱。 SelectMany 展平了結果集,導致計數錯誤,而 Select 直接操作分組後的結果。

This revised answer maintains the image and provides a more accurate and concise explanation of the LINQ problem and solution. The wording is also adjusted for improved clarity and flow.

以上是如何與Groupby正確分組,總和和計數產品?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板