linq.js GroupBy для нескольких столбцов с суммой

Я пытаюсь сгруппировать по 2 столбцам и суммировать третий столбец, как показано здесь (ответ paligap) - linqjs group by с суммой

Мой код -

 var linq = Enumerable.From(treedata);


  var result2 = linq
      .Where(x => x.GlPartnerLevel2 != null)

      .GroupBy(
      "{ Gl1: $.GlPartnerLevel1 , Gl2: $.GlPartnerLevel2,}",
      null,
      function (key, g) {
          var result = {
              Name: key.Gl2,
              ParentName: key.Gl1,
              Value: g.Sum(function (y) { return y.Value | 0; })
          }
          return result;
      })

          .ToArray();

  console.log('result2', result2);

Однако - хотя это, кажется, почти работает, я получаю массив из 17 вместо 2 - так что группировка, возможно, немного отключена?

Что я делаю неправильно?

Поиграйте со всем кодом и данными здесь - http://jsfiddle.net/e3Lu9Lcs/2/

1 ответ

Решение

При группировании по составным ключам необходимо предоставить селектор сравнения, который преобразует ключи в представление, которое можно сравнивать (обычно это строки). Попробуйте это вместо этого:

var query = Enumerable.From(data)
    .Where("$.GlPartnerLevel2 != null")
    .GroupBy(
        "{ PL1: $.GlPartnerLevel1 , PL2: $.GlPartnerLevel2 }",
        "$.Value | 0",
        "{ Name: $.PL2, ParentName: $.PL1, Value: $$.Sum() }",
        "$.PL1 + ' ' + $.PL2") // this must be included
    .ToArray();

обновленная скрипка

Другие вопросы по тегам