javascriptjquerylinqlinq.js

linqjs group by with a sum


This might seems like an easy question but I'm struggling with the linqjs syntax.

Given the following basic JSON:

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

Using linqjs how can I return the total for each currency?

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

The code above doesn't work.


Solution

  • You almost had it. Your key selector in your GroupBy and Sum is incorrect. Also the key selector needs to be a string. Try the following:

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