这似乎是一个简单的问题,但我正在努力使用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)
}});
上面的代码不起作用。
答案 0 :(得分:6)
你几乎拥有它。 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();
答案 1 :(得分: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();
答案 2 :(得分:1)
假设您有一组看起来像这样的对象,您可以像这样编写查询:
var query = Enumerable.From(data)
.GroupBy(
"{ Currency: $.Currency.ID, Type: $.Type.Description }",
"$.Amount",
"{ Currency: $.Currency, Type: $.Type, Total: $$.Sum() }"
)
.ToArray();
我个人认为使用lambda字符串语法更简洁,更可取。混合lambda和函数会导致代码混乱。
答案 3 :(得分:1)
我是开源项目http://www.jinqJs.com
的作者您可以通过执行以下操作轻松完成:
jinqJs().from(data).groupBy('Currency').sum('Amount').select();