2015-11-24 2 views
3

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

Мой код -

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 - так что группировка, возможно, немного выключена?

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

Fiddle со всем кодом и данными здесь- http://jsfiddle.net/e3Lu9Lcs/2/

ответ

2

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

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

updated fiddle

+0

Brilliant, Вы качаться. Скрипка, конечно, работает, и выглядит как более элегантный способ приблизиться к ней ... – Pundit

+0

Я возвращаю свое предложение об использовании 'JSON.stringify', я не знаю, было бы оно очень надежным в целом. К счастью, ключ достаточно прост. –

+0

Хм ... Хорошо, тогда в этом случае я поеду с селекторной версией сравнения. Спасибо за мысль! – Pundit

Смежные вопросы