Estoy en mi primera semana de pasantía de programación de verano y he tenido la tarea de convertir las sentencias de SQL Server 2008 en C# utilizando LINQPad. Una vez que hago eso y lo hago funcionar correctamente, puedo ingresarlo en VS y ajustarlo según sea necesario.Conversión de la sentencia SQL CASE WHEN en C#
El problema es que estoy ejecutando sentencias de SQL que no tengo idea de cómo convertirlas. En mi clase C# no convertimos sentencias SQL en C#, simplemente creamos una variable de cadena, asignamos la declaración SQL a la variable y luego asignamos la variable a un objeto OleDbCommand. Mi mentor se tomó el día libre durante el largo fin de semana y estoy bastante solo y sin idea de qué hacer y necesito ayuda. Hay un par de docenas como esta y si puedo ver cómo hacer una, puedo descifrar el resto. Aquí está la instrucción SQL:
,[hrs].{Hours] - SUM(
CASE
WHEN [UnitState].[UnitStateTye] <> 'ACTIVE'
THEN [Allocation].[AllocatedEnergyMwh]
ELSE 0
END
/CAST([Unit].[NetDependableCapacity] AS FLOAT)) AS SH
Estoy bastante seguro de que esto es una sentencia if lo largo de las líneas de:
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]
He probado el siguiente código, que me di cuenta de que no iba a funcionar pero necesitaba comenzar en alguna parte:
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;
}
Agradecería que alguien me haya señalado la dirección correcta.
+1 para dping realidad algo de trabajo. Muy pocos nuevos programadores aquí parecen hacer eso. –
@ Michael Todd: No puedo saber si dejo que todos los demás lo hagan por mí. No hacer nada no es una opción porque quiero un trabajo con esta compañía cuando me gradúe. Además, no me pagan para desvincularme. –
La primera semana es siempre la más dolorosa. ;) –