Я пытаюсь перевести инструкцию SQL CASE, но я столкнулся с некоторыми проблемами и надеялся, что я могу получить руку. Вот заявление:Trouble перевод 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: Ах, хорошо. В этом есть смысл. Большое спасибо за разъяснение. Вы очень помогли! Я получаю это сейчас. –