2016-05-31 7 views
0

私は自分のプロジェクトの1つでLinq.Jsを使用しようとしています。問題はグループ化を適用してからいくつかの列で合計を使用して最初にいくつかの列を選択することです。例: グループ化してFirstOrDefault 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 }]; 

結果は、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(); 

を取るしかし、それは働いていないでしょう。

答えて

0

問題は、FirstOrDefault()メソッドに何も渡してはいけないということです。パラメータには、セレクタが最初の項目を選択するために使用されます。セレクタではありません。グループの最初のものを取ってcのプロパティを取得してください。

あなたはこのようなあなたのクエリを書くことができ:

var query = Enumerable.From(list) 
    .GroupBy("$.a", null, "{ a: $, b: $$.Sum('$.b'), c: $$.First().c }") 
    .ToArray(); 
+0

ねえ@jeff、その作品。もう1つの質問ですが、グループ化を実行した後に何らかの計算をしたいのであれば、同じクエリで行うことができます。例えば2、b:10、c:1 a:7、b:3、c:2 a:4、b:2、c:5の出力を上回っています。各広告申込情報について、c> 3かどうかを確認したい場合はC * bをdとして実行します。それ以外はcとなります。 a:2、b:10、c:1、d:1 a:7、b:3、c:2、d:2 a:4、b:2、c:5 :d:10 – Rajesh

関連する問題