5

私は夏のプログラミング インターンシップの最初の週で、LINQPadを使用して SQL Server 2008 ステートメントを C# に変換する任務を負っています。それを実行して適切に動作するようになったら、それを VS に入力して、必要に応じて微調整できます。

問題は、変換方法がわからない 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;
    }   

誰かが私を正しい方向に向けることができれば幸いです。

4

1 に答える 1

2

このようなもの:

Hours = condition ? code when true : code when false;
于 2012-05-25T21:00:36.303 に答える