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中执行的语句.情况似乎并非如此......
有人知道解决方法吗?
谢谢
我不知道你是如何得到你的答案对抗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)
解决愚蠢问题的简单解决方法.希望这有助于其他人.