5

这似乎是一个简单的问题,但我正在努力使用 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)
                }});

上面的代码不起作用。

4

4 回答 4

7

你几乎拥有它。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();
于 2013-07-24T06:42:20.883 回答
3

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

您可以通过执行以下操作轻松完成:

new jinqJs().from(data).groupBy('Currency').sum('Amount').select();
于 2015-03-31T02:14:39.523 回答
1

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

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

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();
于 2013-07-24T12:05:28.593 回答
1

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

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

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

于 2013-07-24T20:14:20.967 回答