2013-07-24 3 views
3

이것은 쉬운 질문 인 것처럼 보일지 모르지만 나는 linqjs 구문에 어려움을 겪고 있습니다. linqjs를 사용linqjs group by sum

{ 
     "DateEvent": "2013-04-23 14:00:00Z", 
     "DateRecord": "2013-04-23 14:00:00Z", 
     "Amount": -9500, 
     "Type": { 
      "Description": "Capital" 
     }, 
     "Currency": { 
      "ID": "USD", 
     } 
} 

가 어떻게 각 통화에 대한 총을 반환 할 수 있습니다 : 다음과 같은 기본 JSON을 감안할 때

?

Enumerable.From(data) 
    .GroupBy("{ currency: $.Currency.ID }", null, 
     function (key, g) { 
      var result = { 
        currency: key.currency, 
        total: g.Sum($.Amount) 
       }}); 

위의 코드는 작동하지 않습니다.

답변

6

거의 들었습니다. GroupBy 및 합계의 키 선택기가 올바르지 않습니다. 또한 키 선택기는 문자열이어야합니다. 다음을 시도해보십시오.

var result = Enumerable.From(data).GroupBy("$.Currency.ID", null, 
    function (key, g) { 
     var result = { 
      currency: key, 
      total: g.Sum("$.Amount") 
     } 
     return result; 
    }).ToArray(); 
+0

우수, 감사 Reinard. – paligap

1

이 질문에 대해 더 자세히 설명하십시오.

다음 구문 의지 그룹에 추가 필드로 데이터 :

var result = Enumerable.From(data) 
         .GroupBy("{ currency: $.Currency.ID, type: $.Type.Description }", null, 
          function (key, g) { 
           var result = { 
            currency: key.currency, 
            type: key.type, 
            total: g.Sum("$.Amount") 
           } 
           return result; 
           }, function (x) { return x.currency + ':' + x.type }).ToArray(); 
1

을 당신이 보이는 객체의 배열이 한 가정 할 때,이 같은 쿼리를 작성할 수 있습니다

var query = Enumerable.From(data) 
    .GroupBy(
     "{ Currency: $.Currency.ID, Type: $.Type.Description }", 
     "$.Amount", 
     "{ Currency: $.Currency, Type: $.Type, Total: $$.Sum() }" 
    ) 
    .ToArray(); 

개인적으로 lambda 문자열 구문을보다 간결하고 바람직하게 사용하고 있습니다. 람다와 함수를 섞으면 더 복잡한 코드 IMHO가됩니다.

1

나는 실행하여 오픈 소스 프로젝트 http://www.jinqJs.com

당신은 그것을 할 쉽게 수의 저자 :

jinqJs().from(data).groupBy('Currency').sum('Amount').select();