Jestem na moim pierwszym tygodniu letniego stażu programistycznego i zlecono mi przekonwertowanie instrukcji SQL Server 2008 na język C# przy użyciu LINQPad. Kiedy już to zrobię i sprawię, że działa poprawnie, mogę wprowadzić go do VS i dostosować w razie potrzeby.Konwersja instrukcji SQL CASE WHEN na C#
Problem polega na tym, że używam różnych instrukcji SQL. Nie mam pojęcia, jak konwertować. W mojej klasie C# nie konwertowaliśmy instrukcji SQL na C#, właśnie stworzyliśmy zmienną łańcuchową, przypisaliśmy instrukcję SQL do zmiennej, a następnie przypisaliśmy tę zmienną do obiektu OleDbCommand. Mój mentor wziął dzień wolny na długi weekend i jestem prawie sam i nie mam pojęcia, co robić i potrzebuję pomocy. Jest kilka takich tuzinów i jeśli mogę zobaczyć, jak to zrobić, to mogę wyliczyć resztę. Oto instrukcja SQL:
,[hrs].{Hours] - SUM(
CASE
WHEN [UnitState].[UnitStateTye] <> 'ACTIVE'
THEN [Allocation].[AllocatedEnergyMwh]
ELSE 0
END
/CAST([Unit].[NetDependableCapacity] AS FLOAT)) AS SH
Jestem całkiem pewien, że to jest czy komunikat wzdłuż linii:
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]
Próbowałem poniższy kod, który Pomyślałem nie zadziała ale musiałem gdzieś zacząć:
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;
}
Byłbym wdzięczny, że ktoś może wskazać mi właściwy kierunek.
+1 za faktycznie dping trochę pracy. Wygląda na to, że tak niewielu nowych programistów się tak zachowuje. –
@ Michael Todd: Nie mogę się dowiedzieć, czy pozwalam wszystkim innym na robienie tego za mnie. Nie robienie niczego nie jest opcją, ponieważ chcę mieć pracę w tej firmie po ukończeniu studiów. Poza tym nie płacą mi za to. –
Pierwszy tydzień jest zawsze najbardziej bolesny. ;) –