に変換しています。夏季のプログラミングインターンシップの最初の週に、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;
}
私は誰かが正しい方向に私を指すことができると思います。このような
+1。だから、ここでは新しいプログラマーの数は少ないようだ。 –
@マイケル・トッド:他の人が私のためにやってくれるかどうかは分かりません。私が卒業したときにこの会社と仕事をしたいので、何もしないことは選択肢ではありません。プラス彼らは私を払わないでください。 –
第1週はいつも最も痛いです。 ;) –