【问题标题】:linq.js GroupBy on multiple columns with Sumlinq.js GroupBy 在多列上使用 Sum
【发布时间】:2015-11-24 20:22:48
【问题描述】:

我正在尝试对 2 列进行分组,并对第三列求和,如此处所示(paligap 答案)-linqjs group by with a sum

我的代码是 -

 var linq = Enumerable.From(treedata);


  var result2 = linq
      .Where(x => x.GlPartnerLevel2 != null)

      .GroupBy(
      "{ Gl1: $.GlPartnerLevel1 , Gl2: $.GlPartnerLevel2,}",
      null,
      function (key, g) {
          var result = {
              Name: key.Gl2,
              ParentName: key.Gl1,
              Value: g.Sum(function (y) { return y.Value | 0; })
          }
          return result;
      })

          .ToArray();

  console.log('result2', result2);

但是 - 虽然它似乎几乎可以工作,但我得到了一个 17 而不是 2 的数组 - 所以分组可能有点偏离?

我做错了什么?

在这里摆弄整个代码和数据-http://jsfiddle.net/e3Lu9Lcs/2/

【问题讨论】:

    标签: c# linq group-by linq.js


    【解决方案1】:

    当按复合键分组时,您需要提供一个比较选择器,它将键转换为可以比较的表示形式(通常是字符串)。试试这个:

    var query = Enumerable.From(data)
        .Where("$.GlPartnerLevel2 != null")
        .GroupBy(
            "{ PL1: $.GlPartnerLevel1 , PL2: $.GlPartnerLevel2 }",
            "$.Value | 0",
            "{ Name: $.PL2, ParentName: $.PL1, Value: $$.Sum() }",
            "$.PL1 + ' ' + $.PL2") // this must be included
        .ToArray();
    

    updated fiddle

    【讨论】:

    • 太棒了,你摇滚。小提琴当然有效,看起来是更优雅的处理方式......
    • 我收回我对使用JSON.stringify 的建议,我不知道它是否会非常可靠。幸运的是,关键很简单。
    • 嗯...好的,那么在这种情况下,我将使用比较选择器版本。也感谢您的深思熟虑!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-07
    • 1970-01-01
    • 2021-01-01
    • 2019-02-02
    • 2012-04-20
    • 2019-09-29
    相关资源
    最近更新 更多