Группируй и получай 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();
Другие вопросы по тегам