我正在尝试翻译SQL CASE语句,但遇到了一些问题,希望能得到帮助。以下是语句:
,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
等于零。
发布于 2012-05-29 21:52:42
您需要翻译三个元素:
LINQ语句-这可以是System.Convert
.,例如,(cond) ? trueval : falseval
.Contains
运算符,它可以检查元素是否包含在数组中。System.Convert
.中可以通过相同的方法处理
有了这三条翻译规则,您将需要这样的东西(未经测试):
var types = new [] { "D1", "D2", "D3", "DP", "PD", "DM", "D4" };
Hrs_Derate =
((types.Contains(gads.GadsEventTypeCode) ? allocation.AllocatedEnergyMwh : 0)
/ (Convert.ToFloat(unit.NetDependableCapacity))).Sum()
发布于 2012-05-29 22:20:55
你并不完全是这样的。
“如果Gads.GadsEventTypeCode 等于 'D1','D2','D3','DP','PD','DM','D4'”
这将检查GadsEventTypeCode
是否为列出的任何值。
“则Hrs_Derate等于: Allocation.AllocatedEnergyMwh /Unit.NetDependableCapacity之和”
剩下的就到此为止了。关于ELSE 0
的位导致它忽略不满足GadsEventTypeCode
条件的行,即添加0不会影响SUM
。NULL
也可以工作。
https://stackoverflow.com/questions/10800364
复制相似问题