2013-06-26 2 views
0

집계 계산을 통해 월 단위로 그룹화하여 Linq를 사용하여 문제를 해결하는 방법을 알고 싶습니다. 월별 Linq 그룹, 집계 계산

Code  CodeName Color  Month 
11111  One  Red   1 
11111  One  Red   1 
11111  One  Red   2 
22222  Two  Green  2 
33333  Three  Yellow  3 
44444  Four  Blue   4 
44444  Four  Blue   4 
55555  Five  White  5 

이 같은 결과보고 싶은

: 여기

Code  CodeName  Color  Count(Mont1) Month2  Month3 Month4 Month5 
11111  one  red   2   1   0   0   0 
22222  two  Green   0   1   0   0   0 
33333  three  Yellow  0   0   1   0   0 
44444  four  Blue   0   0   0   2   0 
55555  five  White   0   0   0   0   1 
+3

그래서 지금까지 어떤 시도를 했습니까? – Deeko

+0

LINQ + 피벗을 찾고 은색 총알이 없음을 확인하십시오. 이것은 전에 여러 가지 방법으로 질문되었습니다. –

답변

0

가 원하는 결과

그것의 핵심을 생성하는 예입니다 아래

내 샘플 데이터입니다 이 :

  • 그룹 각각 MonthX 속성 내부 그룹 내의 오브젝트의 개수로 설정되는 결과를 만드는 그들의 Color 특성
  • 프로세스 각 그룹별로 자신 Code 특성
  • 그룹 각 그룹의 요소에 의해 요소 (코드에 의해 상품 색깔로) 주어진 달 식별자를 가진

질문에 제공된 5 개월 값을 구체적으로 처리합니다. 원하는 모든 월 값을 결과 개체의 자체 속성으로 나눌 수 있습니다. 다른 값이 필요한 경우 월 색인 사전 대 사전 계산

public enum Number 
{ 
    One = 11111, 
    Two = 22222, 
    Three = 33333, 
    Four = 44444, 
    Five = 55555 
} 

public class Data 
{ 
    public Number Code { get; set; } 
    public string CodeName { get { return Enum.GetName(typeof(Number), Code); } } 
    public ConsoleColor Color { get; set; } 
    public int Month { get; set; } 
} 

public class Result 
{ 
    public Number Code { get; set; } 
    public string CodeName { get { return Enum.GetName(typeof(Number), Code); } } 
    public ConsoleColor Color { get; set; } 
    public int Month1 { get; set; } 
    public int Month2 { get; set; } 
    public int Month3 { get; set; } 
    public int Month4 { get; set; } 
    public int Month5 { get; set; } 
} 

class Program 
{ 
    static void Main(string[] args) 
    { 
     var items = new Data[] 
     { 
      new Data{Code = Number.One, Color = ConsoleColor.Red, Month = 1}, 
      new Data{Code = Number.One, Color = ConsoleColor.Red, Month = 1}, 
      new Data{Code = Number.One, Color = ConsoleColor.Red, Month = 2}, 
      new Data{Code = Number.Two, Color = ConsoleColor.Green, Month = 2}, 
      new Data{Code = Number.Three, Color = ConsoleColor.Yellow, Month = 3}, 
      new Data{Code = Number.Four, Color = ConsoleColor.Blue, Month = 4}, 
      new Data{Code = Number.Four, Color = ConsoleColor.Blue, Month = 4}, 
      new Data{Code = Number.Five, Color = ConsoleColor.White, Month = 5}, 
     }; 

     var results = items.GroupBy(x => x.Code).Select(
      x => x.GroupBy(y => y.Color) 
        .Select(z => new Result 
        { 
         Code = x.Key, 
         Color = z.Key, 
         Month1 = z.Count(q => q.Month == 1), 
         Month2 = z.Count(q => q.Month == 2), 
         Month3 = z.Count(q => q.Month == 3), 
         Month4 = z.Count(q => q.Month == 4), 
         Month5 = z.Count(q => q.Month == 5), 
        }).ToList()); 

     var resultList = results.ToList(); 
    } 
}