2011-09-02 4 views
0

나는 다음과 같은 클래스가 : ScrapReason에 내가 날짜 범위 사이의 모든 행을 (즉 쉬운 부분) 검색하는 LINQ 쿼리와 함께 도움을 사용할 수는 LINQ 쿼리와 함께 도움이 필요

internal class ModuleScrap 
    { 
     public System.DateTime ReadTime { get; set; } 
     public string ScrapReason { get; set; } 
     public Int16 NetScrap { get; set; } 
    } 

, 그룹 및 각 그룹에 대해 NetScrap의 합계를 결정합니다. LINQ에서 그룹화에 대한 경험이 많지 않습니다. 이 같은

+3

무엇을 시도 했습니까? 시작하기에 매우 좋은 [101 LINQ samples] (http://msdn.microsoft.com/en-us/vcsharp/aa336746) 페이지가 있으며 복잡한 작업은 아닙니다. – Jon

+0

@jon - Jon Skeet의 답변을 살펴보십시오. 이것이 제가 이렇게 간단한 질문을하는 이유입니다. 그렇지 않다면 Int16 값을 사용하여 합계를 사용하는 것에 대한 훌륭한 교훈을 놓쳤을 것입니다. – Hosea146

+0

그건 당신이 놓칠 수없는 교훈입니다 - 필요하다면 컴파일러는 당신에게 상기시켜 줄 것입니다. – Jon

답변

7

뭔가, 나는 의심 : SumInt16 값에 대해 정의되지 않기 때문에 int 캐스트가

var query = from scrap in scraps 
      where scrap.ReadTime >= minDate && scrap.ReadTime <= maxDate 
      group scrap by scrap.ScrapReason into g 
      select new { Reason = g.Key, Total = g.Sum(x => (int) x.NetScrap) }; 

하는 것으로. 다른 방법은 그룹화를 변경하는 것입니다.

var query = from scrap in scraps 
      where scrap.ReadTime >= minDate && scrap.ReadTime <= maxDate 
      group (int) scrap.NetScrap by scrap.ScrapReason into g 
      select new { Reason = g.Key, Total = g.Sum() }; 

그들은 같은 결과를 줄 것입니다.

+1

멋지게 완성 된 Jon과 +1은 Int16에서 사용할 수없는 Sum에 대한 참조입니다. – Hallaghan

+1

@ 존 - 좋은 답변입니다. 고맙습니다. – Hosea146

관련 문제