我需要使用 SQRT 函数作为 Linq EF 查询中 where 子句的一部分。我想我可以这样做:
var qry = context.MyTable.Where("sqrt(it.field) > 1");
但它返回一个错误,指出“‘sqrt’无法解析为有效的类型构造函数或函数。,靠近函数、方法或类型构造函数,第 6 行第 5 列。”
我一直认为 linq 从字面上获取 where 子句中的内容并将其转换为直接在 SQL 中执行的语句。看来事实并非如此...
有人知道解决方法吗?
Thanks
我不知道你是如何针对 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]
一个足够简单的解决方法来解决一个愚蠢的问题。希望这可以帮助其他人。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)