2015-11-24 112 views
3

我想组2列,总结第三列多列,如下所示(paligap答案) - linqjs group by with a sumlinq.js的GroupBy与点心

我的代码 -

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/

回答

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

辉煌,你的岩石。当然,小提琴的作品,看起来像更接近它的优雅方式... – Pundit

+0

我拿回我的建议,使用'JSON.stringify',我不知道它是否会是非常可靠的一般。幸运的是,关键很简单。 –

+0

嗯......好的,那么在这种情况下,我会选择比较选择器版本。谢谢你以后的想法! – Pundit