私は夏のプログラミング インターンシップの最初の週で、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;
}
誰かが私を正しい方向に向けることができれば幸いです。