【问题标题】:linq calculated value with group bylinq 计算值与分组依据
【发布时间】:2012-10-05 15:05:34
【问题描述】:

在构造 linq 语句时遇到了一些麻烦(C#,查询语法,但我可以处理方法语法)。它需要支持分组以及公开计算的属性。我对每一个都有处理,但无法让它们看起来一起工作。任何帮助将不胜感激。

数据

GrpField          Qty      Price
-------------     ---      -----
RED                1        10
RED                2        10
RED                1        50
BLUE               2        30
BLUE               2        50

输出需要是每组总价格的总和(数量 * 价格)

期望的结果

RED    80
BLUE  160

这让我得到了总价格线

from x in origdata
let linetotal = x.qty * x.price
select new { x.grpfield, x.qty, x.price, linetotal } 

但我无法按新的匿名类型进行分组,因为您无法在匿名类型上运行 sum 之类的聚合。如果我先运行该组,我无法弄清楚如何在总和之前将 linetotal 加入混合中。

【问题讨论】:

    标签: c# linq


    【解决方案1】:

    作为不利于您的证据,因为您不能在匿名类型上运行 sum 之类的聚合 语句...

    var data = new[]
        {
            new {GrpField = "RED", Qty = 1, Price = 10},
            new {GrpField = "RED", Qty = 2, Price = 10},
            new {GrpField = "RED", Qty = 1, Price = 50},
            new {GrpField = "BLUE", Qty = 2, Price = 30},
            new {GrpField = "BLUE", Qty = 2, Price = 50},
        };
    
    var grouped =
        from d in data
        group d by d.GrpField
        into g
        select new {Group = g.Key, Sum = g.Sum(x => x.Qty * x.Price)};
    
    foreach(var g in grouped)
        Console.WriteLine("{0} - {1}", g.Group, g.Sum);
    

    【讨论】:

    • 该声明不是我的意见 - 如果您采用我的原始查询并尝试在 anon 类型上运行 group by,那是编译器错误(在 MS 文档中)。诀窍(正如您和其他答案所证明的那样)是先分组。
    【解决方案2】:

    先分组,再求和。

    origdata.GroupBy(m => m.GrpField)
     .Select(group => new {
         GrpField = group.Key,
         CalculatedValue = group.Sum(m => m.qty * m.price)
      });
    

    【讨论】:

      【解决方案3】:
      origdata.GroupBy(p=>p.GrpField)
      .Select(p=> new()
      {
          GrpField=p=>p.Key,
          Sum=p.Sum(q=>q.Qty*q.Price)
      })
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-03-18
        • 2010-10-16
        • 1970-01-01
        • 2021-11-04
        • 2018-07-28
        • 1970-01-01
        • 2021-09-02
        • 1970-01-01
        相关资源
        最近更新 更多