2012-05-25 7 views
5

으로 변환 여름 프로그래밍 인턴쉽의 첫 주에 SQL Server 2008 문을 LINQPad을 사용하여 C#으로 변환해야합니다. 일단 내가하고 그것을 제대로 작동하게, 나는 그것을 VS로 입력하고 필요에 따라 조정할 수 있습니다.SQL CASE WHEN 문을 C#

문제점은 변환하는 방법을 모르는 SQL 문을 통해 실행되고 있다는 것입니다. C# 클래스에서는 SQL 문을 C#으로 변환하지 않았습니다. 문자열 변수를 만들고 변수에 SQL 문을 할당 한 다음 변수를 OleDbCommand 개체에 할당했습니다. 나의 멘토는 긴 주말을 쉬는 날이었습니다. 나는 무엇을해야하고 도움이 필요한지에 대해 내 자신과 우둔함을 거의 가지고 있습니다. 이 한두 개의 십여 개가 있습니다. 한 개를 어떻게 할 수 있는지를 알면 나머지를 찾아 낼 수 있습니다. 내가 생각 다음과 같은 코드가 작동하지 않을 된 시도

if [UnitState].[UnitStateType] does not equal active 
then SH equals [hrs].[Hours] minus the the sum of 
    [Allocation].[AllocatedEnergyMwh]/(float)[Unit].[NetDependableCapacity]. 
else 
    SH = [hrs].[Hours] 

:이의 라인을 따라 if 문입니다 확신

,[hrs].{Hours] - SUM(
    CASE 
    WHEN [UnitState].[UnitStateTye] <> 'ACTIVE' 
     THEN [Allocation].[AllocatedEnergyMwh] 
    ELSE 0 
    END 
/CAST([Unit].[NetDependableCapacity] AS FLOAT)) AS SH 

다음은 SQL 문입니다 하지만 어딘가에서 시작해야했습니다 :

var results = 

    (from v in VDimUnit  
     join vf in VFactEnergyAllocation on v.UnitKey equals vf.UnitKey 
     join vd in VDimGadsEvent on vf.GadsEventKey equals vd.GadsEventKey 
     join vt in VDimTime on vf.TimeKey equals vt.TimeKey 
     join vus in VDimUnitState on vf.UnitKey equals vus.UnitKey 
    where vd.GadsEventEndTime.Year == 2011 && v.UnitId == "THL3" 
    group vf by new {vus.UnitStateType, vf.AllocatedEnergyMwh v.NetDependableCapacity, 
     vt.QuarterNum} into groupItem  
    select new {groupItem.Key.QuarterNum, SUM1 = groupItem.Sum(x=> (float)x.AllocatedEnergyMwh/
     groupItem.Key.NetDependableCapacity)}).ToArray(); 

var resultHours = 
    (from v in VDimTime 
    group v by v.QuarterNum into groupItem 
    select new {Hours = groupItem.Count(), groupItem.Key}).ToDictionary(x=> x.Key, x=> x.Hours); 

var finalResults = 
    (from r in results 
    select new {SH_IF_NOT_ACTIVE = resultHours[r.QuarterNum] - r.SUM1, 
     Hours = 
     SH_IF_ACTIVE = resultHours[r.QuarterNum]}); 

    if (SH != "ACTIVE") 
    { 
     SH_IF_NOT_ACTIVE; 
    } 
    else 
    { 
     SH_IF_ACTIVE; 
    } 

누군가가 올바른 방향으로 나를 가리킬 수 있습니다. 이 같은

+3

+1 실제로 몇 가지 작업을 dping합니다. 그래서 여기에 새로운 프로그래머가 거의없는 것처럼 보입니다. –

+2

@ Michael Todd : 다른 사람들이 내게 해줄 지 모르겠다. 내가 졸업 할 때이 회사와 일하기를 원하기 때문에 아무것도하지 않는 것은 선택 사항이 아닙니다. 게다가 그들은 나에게 돈을 지불하지 않습니다. –

+0

주먹은 항상 가장 고통 스럽습니다. ;) –

답변

2

뭔가 :

Hours = condition ? code when true : code when false; 
+0

@ AD.Net : 귀하의 도움에 감사드립니다. –

+0

오신 것을 환영합니다. 구문이있는 속임수입니다. –

관련 문제