Группируй и получай FirstOrDefault LINQ.js
Я пытаюсь использовать Linq.Js в одном из моих проектов. Проблема в том, что мне нужно применить группировку, а затем использовать сумму для некоторых столбцов и выбрать первый из некоторых столбцов. например
var list = [
{ a: 2, b: 4, c: 1 },
{ a: 2, b: 3, c: 7 },
{ a: 2, b: 3, c: 3 },
{ a: 4, b: 7, c: 5 },
{ a: 7, b: 3, c: 2 },
{ a: 4, b: 1, c: 5 }];
результат будет сгруппированы по a, сумма b и займет первое из c
a:2,b:10,c:1
a:7,b:3,c:2
a:4,b:1,c:5
До сих пор я пытался,
var aggregatedObject = Enumerable.From(claimForCalculation)
.GroupBy("$.a", null,
function (key, g) {
var result = {
groupedKey: key,
chargedQty: g.Sum("$.b"),
chargedRate: g.FirstOrDefault("$.c"),
}
return result;
}, function (x) { return x }).ToArray();
Но это не работает.
1 ответ
Проблема в том, что вы не должны ничего передавать в FirstOrDefault()
метод. Параметр есть предикат, используемый для выбора первого элемента, это не селектор. Просто возьмите первый из группы и получите c
имущество.
Вы можете написать свой запрос так:
var query = Enumerable.From(list)
.GroupBy("$.a", null, "{ a: $, b: $$.Sum('$.b'), c: $$.First().c }")
.ToArray();