2013-08-27 2 views
0

linq을 사용하여 GroupBy를 사용하려고하는데 문제가 있습니다. 작동하지만 코드의 한 요소 만 제거하면 작동합니다.Linq Groupby 문제 합산하지 않음

nestedGroupedStocks = stkPositions.GroupBy(x => new { x.stockName, 
            x.stockLongshort,x.stockIsin, x.stockPrice }) 
      .Select(y => new stockPos 
      { 
       stockName = y.Key.stockName, 
       stockLongshort = y.Key.stockLongshort, 
       stockIsin = y.Key.stockIsin, 
       stockPrice = y.Key.stockPrice, 
       stockQuantity = y.Sum(x => x.stockQuantity) 
      }).ToList(); 

위의 코드 그룹 내 재고 위치와 47 개 항목하지만 그것을 할 실패 다른 수량과 금액 중복 주식 인을 포함하는 목록에서 결과 ... 그러나

nestedGroupedStocks = stkPositions.GroupBy(x => new { x.stockName, 
         x.stockIsin, x.stockPrice }) 
      .Select(y => new stockPos 
      { 
       stockName = y.Key.stockName, 
       stockIsin = y.Key.stockIsin, 
       stockPrice = y.Key.stockPrice, 
       stockQuantity = y.Sum(x => x.stockQuantity) 
      }).ToList(); 

나는 경우 나에게 견과류 :-) 운전 "x.longshort"그럼 내가 원하는 결과, 34 개 주식 요약 얻을하지만, 목록에있는 모든 longshort 요소가 null입니다 ...

그것을 elimanate

+0

목록 데이터 제출 –

답변

2

이 부분

.GroupBy(x => new { x.stockName,x.stockLongshort,x.stockIsin, x.stockPrice }) 

이 문제입니다. 해당 새 객체를 키로 그룹화하려고 시도하지만 x.stockLongshort가 목록의 모든 단일 요소에 대해 변경 될 가능성이 높으므로 이름과 stockLongshort가 두 요소에서 일치하지 않으면 GroupBy이 실패합니다 (다른 요소와 마찬가지로 2 필드,하지만 그 항상 동일하다고 가정). stockLongshort 속성 그룹의 첫 번째 요소의 값과 동일하게 설정되는 것을

nestedGroupedStocks = stkPositions.GroupBy(x => x.stockName) 
     .Select(y => new stockPos 
     { 
      stockName = y.First().stockName, 
      stockLongshort = y.First().stockLongshort, 
      stockIsin = y.First().stockIsin, 
      stockPrice = y.First().stockPrice, 
      stockQuantity = y.Sum(z => z.stockQuantity) 
     }).ToList(); 

참고. 그게 더 유용 할 경우 0으로 설정할 수 있습니다.

긴 설명 GROUPBY이 IEnumerable<IGrouping<TKey, TSource>>을 반환

, 그건 당신이 정의되었는지, 같은 Key을 공유하는 같은 그룹의 각 요소에, (당신이 enumarte 수) 그룹의 "설정"입니다 인수의 람다 식 당신이 Key 객체의 속성으로 x.stockLongshort을 넣으면

, 즉 결과적으로, 단지 두 개의 다른 그룹에서 해당 속성에 의해 다른 두 가지 요소를두고 있음을, GroupBy에 의해 평가의 판별이된다.

+0

감사합니다. 그건 대접이야. 이제 왜 당신의 설명을 사용하는지 이해했습니다! Muchas Gracias – Timujin

+1

expalantion을 더 명확하게 만들기 위해 더 많은 텍스트를 추가했습니다. 적어도 다음과 같이하십시오. :) – Save