2012-05-25 10 views
5

に変換しています。夏季のプログラミングインターンシップの最初の週に、SQL Server 2008ステートメントをC#に変換することを務めています。LINQPadを使用しています。私がそれをして正常に動作させると、VSに入力して必要に応じて調整することができます。SQL CASE WHENステートメントをC#

問題は、私が変換する方法がわからないSQL文を実行していることです。私のC#クラスでは、SQL文をC#に変換せずに、文字列変数を作成し、SQL文を変数に割り当ててから、変数をOleDbCommandオブジェクトに割り当てました。私のメンターは長い週末の休みを取っていました。私は何をすべきか、何か助けが必要なのか、自分自身と無縁です。このようなダースがいくつかあります。もし私が1つの方法を見ることができれば、残りを把握することができます。ここではSQL文は次のとおりです。

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

私はの線に沿ってif文これはかなり確信している:

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] 

は私が仕事に行くのではなかった考え出し次のコードを、試してみました

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。だから、ここでは新しいプログラマーの数は少ないようだ。 –

+2

@マイケル・トッド:他の人が私のためにやってくれるかどうかは分かりません。私が卒業したときにこの会社と仕事をしたいので、何もしないことは選択肢ではありません。プラス彼らは私を払わないでください。 –

+0

第1週はいつも最も痛いです。 ;) –

答えて

2

何か:実際にいくつかの仕事をdpingため

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

@ AD.Net:ご協力いただきありがとうございます。 –

+0

ご参考までに、それは構文のちょっとしたトリックです –

関連する問題