Привет!
Есть, например, вот такой искусственный запрос
from cla in P2P_CALCULATED_CESSION_LOAN_ACCRUE
let cessionStartPlus2 = cla.CessionStart.AddDays(2)
let x = P2P_CALCULATED_CESSION_LOAN_ACCRUE.Sum(y => y.InvestorInterest)
select new
{
Y1 = x < 0 ? 9 : x + 8,
Y2 = Math.Round(x + x)
};
он раскрывается вот портянку, где вычисление x будет повторено несколько раз
SELECT
CASE
WHEN (
SELECT
Sum([t1].[InvestorInterest])
FROM
[dbo].[P2P_CALCULATED_CESSION_LOAN_ACCRUE] [t1]
) < 0
THEN 9
ELSE (
SELECT
Sum([t1].[InvestorInterest])
FROM
[dbo].[P2P_CALCULATED_CESSION_LOAN_ACCRUE] [t1]
) + 8
END as [c2],
(
SELECT
Sum([t2].[InvestorInterest])
FROM
[dbo].[P2P_CALCULATED_CESSION_LOAN_ACCRUE] [t2]
) as [c4]
FROM
[dbo].[P2P_CALCULATED_CESSION_LOAN_ACCRUE] [t3]
Есть ли какой-то способ вместо прямой подстановки сгенерировать запрос с внешним select?
Что-то вроде такого
select
CASE WHEN t1.x < 0 THEN 9 ELSE t1.x + 8 END as [c2],
Round(t1.x + t1.x, 2) as [c4]
from (SELECT Sum([InvestorInterest]) as x FROM [dbo].[P2P_CALCULATED_CESSION_LOAN_ACCRUE]) [t1]
Может как-то руками можно указать, что в данном случае надо x не раскрывать, а один раз вычислить и дальше оборачивать внещними селектами?