我正在尝试翻译一个SQL CASE语句,但遇到了一些问题,并希望能得到一只手。以下是该语句:无法翻译SQL语句
,SUM(CASE WHEN [Gads].[GadsEventTypeCode] IN ('D1', 'D2', 'D3', 'DP', 'PD', 'DM', 'D4')
THEN [Allocation].[AllocatedEnergyMwh] ELSE 0 END/
CAST([Unit].[NetDependableCapacity] AS FLOAT)) AS Hrs_Derate
这是我想出,但得到“迷失东京”:
如果[Gads].[GadsEventTypeCode]
等于'D1', 'D2', 'D3', 'DP', 'PD', 'DM', 'D4'
然后Hrs_Derate
等于总和:
[Allocation].[AllocatedEnergyMwh]/[Unit].[NetDependableCapacity]
其他Hrs_Derate
等于零。
@ mellamokb - 感谢您的帮助,特别是关于.Contains运算符。我一定会利用它。但是,在我可以将SQL翻译成LINQ之前,我必须明白声明的意思。那正是我想要包裹我的头。我在上面创建的if语句是否正确地翻译了SQL语句的内容? –
是的,你对代码有一个粗略的认识。请注意,'GadsEventTypeCode'可能对每一行都不相同,所以它不会计算* Allocation.AllocatedEnergyMwh/Unit.NetDependeableCapacity或'0'的总和,但它通过行“循环”,并说,如果该行有一种类型的“D1,D2,...”,则将能量/容量添加到正在运行的总数中,否则将添加0.在表中的所有行中,一些将匹配类型代码并贡献一个值朝向总和,有些不匹配,因此对总和贡献0。 – mellamokb
@ mellamokb:啊,好的。这就说得通了。非常感谢你的澄清。你一直在帮助很大!我现在明白了。 –