首页 > 后端开发 > C++ > 如何与Groupby正确分组,总和和计数产品?

如何与Groupby正确分组,总和和计数产品?

Patricia Arquette
发布: 2025-01-24 17:01:09
原创
798 人浏览过

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
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板