Я не знаю, как ты получил свой ответ, работая против EF. Когда я попробовал это с EF4, у меня не получилось. Я бы получил:
LINQ to Entities не распознает метод метода Double Sqrt (Double), и этот метод нельзя преобразовать в выражение хранилища.
Таким образом, после того, как я некоторое время ударился об это (в конце концов, Math.Pow(double)
поддерживается и SQRT
доступен в SQL), я понял, что корень квадратный из значения такой же, как и его сила половина.
Итак, это решение отлично работает.
from e in context.MyEntities
let s = Math.Pow(e.MyDouble, 0.5)
select s;
Сгенерированный SQL использует POWER
вместо SQRT
:
SELECT
POWER( CAST( [Extent1].[MyDouble] AS float), cast(0.5 as float(53))) AS [C1]
FROM [dbo].[MyEntities] AS [Extent1]
Достаточно простой обходной путь для решения проблемы. Надеюсь, это поможет кому-то еще.