2010-01-14 4 views
0

개인의 조직으로 그룹화 된 일련의 항목에 대한 비용을 합산하려고합니다. 나는 합계가 올바르게 작동하고 있다고 믿지만, 나는 나의 그룹을 보지 않고있다. 롤업에 저장된 객체에는 합계의 값만 포함됩니다. 나는 그들이 조직에 대한 비용의 합 이외에 조직을 가질 것으로 기대합니다. 나는이 표현에서 무엇을 놓쳤는가?C# 문제에서 값으로 그룹화 한 후 합계

var rollup = OrgPersonList.GroupBy(
    person => person.Person.Org).Select(group => 
     group.Sum(price => price.Items.Sum(item => 
      item.Cost))); 

답변

1

그럼 당신은 합계를 선택 있어 - 당신은뿐만 아니라 키를 원하는 경우, 당신은을 선택해야합니다. 이 같은 항목이 모두 캡슐화 보인다 내가 x보다는 person 또는 price을 사용했습니다

var rollup = OrgPersonList.GroupBy(x => x.Person.Org) 
    .Select(group => new { group.Key, 
          Sum =group.Sum(x => x.Items.Sum(item => item.Cost))}); 

참고 : 예를 들면.

var rollup = from x in OrgPersonList 
      group x by x.Person.Org into grouped 
      select new { grouped.Key, 
          Sum =grouped.Sum(x => x.Items.Sum(item =>item.Cost))}); 

(공백 서식 다소 타이트 ...)

또는 다시 각 항목의 합계를 계산 수에 의해 그룹 ..., 그래서 :

또는 쿼리 식으로

결과는 그룹의 항목의 합계 일뿐입니다.

var rollup = from x in OrgPersonList 
      group x.Items.Sum(item => item.Cost) by x.Person.Org into grouped 
      select new { grouped.Key, Sum = grouped.Sum() }); 
+0

단일 문자 변수 이름은 linq/lambda 식의 선택 도구입니까? – ahsteele

+1

@ahsteele : OrgPersonList의 항목이 실제로 무엇인지에 대한 정보가 없었기 때문에 더 나은 이름을 찾기가 어려웠습니다. 틀림없이 단일 문자 이름은 LINQ 쿼리 *에서 쉽게 이해할 수 있습니다. 이 경우에는 필연적으로 더 많은 것이 었습니다. 같은 유형의 객체에 대해 '사람'과 '가격'을 사용하는 것과 반대되는 동일한 유형의 객체를 일관되게 사용하고 싶었습니다. –

+0

@ 존 이러한 옵션 중 성능 차이가 있습니까? 아니면 환경 설정의 문제입니까? – ahsteele