在Linq EF查询中使用SQRT

bug*_*ixr 3 linq-to-entities sql-server-2008 c#-3.0

我需要使用SQRT函数作为Linq EF查询中where子句的一部分.我想我能做到这一点:

var qry = context.MyTable.Where("sqrt(it.field) > 1");
Run Code Online (Sandbox Code Playgroud)

但它返回一个错误,说"'sqrt'无法解析为有效的类型构造函数或函数.,靠近函数,方法或类型构造函数,第6行,第5列."

我一直认为linq字面上取得了where子句中的内容,并将其转换为直接在SQL中执行的语句.情况似乎并非如此......

有人知道解决方法吗?

谢谢

Dre*_*kes 8

我不知道你是如何得到你的答案对抗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;
Run Code Online (Sandbox Code Playgroud)

生成的SQL使用POWER而不是SQRT:

SELECT 
POWER( CAST( [Extent1].[MyDouble] AS float), cast(0.5 as float(53))) AS [C1]
FROM [dbo].[MyEntities] AS [Extent1]
Run Code Online (Sandbox Code Playgroud)

解决愚蠢问题的简单解决方法.希望这有助于其他人.