首页 >后端开发 >C++ >如何正确使用LINQ的GroupBy、Sum、Count来聚合产品数据?

如何正确使用LINQ的GroupBy、Sum、Count来聚合产品数据?

Linda Hamilton
Linda Hamilton原创
2025-01-24 16:56:13352浏览

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