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