2012-12-18 5 views
0

가능한 중복 :계산 필드

private void MyFunction(byte Period) 
{ 
    ... 
:이 같은 기능이

:
linq case statement

이 시나리오를 고려하시기 바랍니다

다음과 같은 데이터베이스에 테이블이 있습니다.

... F008 F009_1 F009_2 F009_3 F009_4 F009_5 F009_6 F009_7 F009_8 ... 

------------------------------------------------------------------------------------------------- 

기능 단위로 계산하고 싶습니다.

var MyCalculation = from r in ent.MyTable 
        group r by new { r.F000 } into grp 
        select new 
          { 
           F008 = grp.Sum(o => o.F008) 
           F009 = ????? 

문제는 내가 LINQ 프로젝션에서이 작업을 수행해야 F009의 경우입니다 :

switch(Period) 
{ 
    case 1: 
     F009 = (Sum of F009_1) + (Sum of F009_2); 
     break; 
    case 2: 
     F009 = (Sum of F009_3) + (Sum of F009_4); 
     break; 
    case 3: 
     F009 = (Sum of F009_5) + (Sum of F009_6); 
     break; 
    case 4: 
     F009 = (Sum of F009_7) + (Sum of F009_8); 
     break; 
} 

내가 LINQ 프로젝션이 switch case를 사용할 수 있습니까?

감사합니다.

답변

0
var groupQuery = ent.MyTable.GroupBy(r => r.F0000); 
IEnumerable<Result> query; 

switch(Period) 
{ 
    case 1: 
     query = groupQuery.Select(grp => new Result { 
       F008 = grp.Sum(r => r.F008), 
       F009 = grp.Sum(r => r.F009_1 + r.F009_2) 
      }; 
     break; 
    case 2: 
     query = groupQuery.Select(grp => new Result { 
       F008 = grp.Sum(r => r.F008), 
       F009 = grp.Sum(r => r.F009_3 + r.F009_4) 
      }; 
     break; 
    case 3: 
     query = groupQuery.Select(grp => new Result { 
       F008 = grp.Sum(r => r.F008), 
       F009 = grp.Sum(r => r.F009_5 + r.F009_6) 
      }; 
     break; 
    case 4: 
     query = groupQuery.Select(grp => new Result { 
       F008 = grp.Sum(r => r.F008), 
       F009 = grp.Sum(r => r.F009_7 + r.F009_8) 
      }; 
     break; 
} 

var MyCalculation = query.ToList(); 

그리고 당신의 DTO :

public class Result 
{ 
    // provide actual data types 
    public int F008 { get; set; } 
    public int F009 { get; set; } 
} 
0

인라인과 결합 쿼리 조합이어야합니다. 정확한 시나리오 나 작성한 검색어를 알려주십시오. 당신이 따를 수

한 가지 방법은 쿼리를 구축하고 스위치 케이스를 작성하고 그것을 통해 UR 쿼리를 포함입니다 .. 같은 이 비슷한 방법으로 같은

case 1: var MyCalculation = from r in ent.MyTable 
        group r by new { r.F000 } into grp 
        select new 
          { 
           F008 = grp.Sum(o => o.F008) 
           F009 =F009_1+F009_2,} 

`

수행 할 수 있습니다 .. 어쨌든 쿼리 한 번 실행하고있는 가장 쉬운 방법입니다됩니다