linqjs group with a sum

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

上面的代码不起作用。

你几乎拥有它。 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(); 

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

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

 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(); 

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

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

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

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

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

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