【问题标题】:linqjs group by with a sumlinqjs 用总和分组
【发布时间】:2013-07-23 08:07:29
【问题描述】:

这似乎是一个简单的问题,但我正在努力使用 linqjs 语法。

鉴于以下基本 JSON:

{
        "DateEvent": "2013-04-23 14:00:00Z",
        "DateRecord": "2013-04-23 14:00:00Z",
        "Amount": -9500,
        "Type": {
            "Description": "Capital"
        },
        "Currency": {
            "ID": "USD",
        }
}

使用 linqjs 如何返回每种货币的总数?

Enumerable.From(data)
    .GroupBy("{ currency: $.Currency.ID }", null, 
        function (key, g) {
            var result = {
                    currency: key.currency,
                    total: g.Sum($.Amount)
                }});

上面的代码不起作用。

【问题讨论】:

    标签: javascript jquery linq linq.js


    【解决方案1】:

    你几乎拥有它。 GroupBy 和 Sum 中的键选择器不正确。键选择器也需要是一个字符串。请尝试以下操作:

    var result = Enumerable.from(data).groupBy("$.Currency.ID", null,
        function (key, g) {
            var result = {
                currency: key,
                total: g.sum("$.Amount")
            }
            return result;
        }).ToArray();
    

    【讨论】:

      【解决方案2】:

      只是为了进一步扩展这个问题。

      以下语法将按附加字段对数据进行分组:

      var result = Enumerable.from(data)
                             .groupBy("{ currency: $.Currency.ID, type: $.Type.Description }", null,
                                  function (key, g) {
                                      var result = {
                                           currency: key.currency,
                                           type: key.type,
                                           total: g.Sum("$.Amount")
                                      }
                                      return result;
                                      }, function (x) { return x.currency + ':' + x.type }).ToArray();
      

      【讨论】:

        【解决方案3】:

        假设您有一个看起来像这样的对象数组,您可以这样编写查询:

        var query = Enumerable.from(data)
            .groupBy(
                "{ Currency: $.Currency.ID, Type: $.Type.Description }",
                "$.Amount",
                "{ Currency: $.Currency, Type: $.Type, Total: $$.Sum() }"
            )
            .ToArray();
        

        我个人觉得使用 lambda 字符串语法更简洁、更可取。混合 lambdas 和函数会导致代码更混乱恕我直言。

        【讨论】:

          【解决方案4】:

          我是开源项目http://www.jinqJs.com的作者

          你可以很容易地通过执行:

          new jinqJs().from(data).groupBy('Currency').sum('Amount').select();
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2018-07-16
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多