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