实体框架转换问题:无法翻译 Double.Parse
使用 LINQ to Entities 时,需要注意的是,并非所有方法都适用LINQ to Objects中支持的可以直接翻译成SQL查询。一个常见错误是无法在 LINQ to Entities 语句中使用 Double.Parse()。
解决 Double.Parse() 的问题
解决此问题,您可以定义一个执行解析的自定义方法,并使用 *.edmx 中定义的函数将其转换为有效的 SQL
示例:
定义 SQL 转换:
在 *. edmx文件中,添加以下函数定义:
<Function Name="ParseDouble" ReturnType="Edm.Double"> <Parameter Name="stringvalue" Type="Edm.String"></Parameter> <DefiningExpression> cast(stringvalue as Edm.Double) </DefiningExpression> </Function>
在代码中创建自定义方法:
在您的 ObjectContext 部分类(通常由 EDMX 生成)中,添加以下方法:
public static double ParseDouble(string stringvalue) { return Double.Parse(stringvalue); }
此方法将在 LINQ 查询期间充当存根,被转换为 EDMX 中定义的 SQL CAST 语句。
示例(应用自定义方法):
在 LINQ 语句中,替换Double.Parse() 与 YourObjectContext.ParseDouble() 的任何实例都可以利用自定义方法并允许转换为SQL.
其他注意事项:
请记住,如果特定上下文中的实体框架不支持 Math.Round() ,则可能也需要类似的方法。使用 EDM 规范函数列表来确定要定义的适当 SQL 函数。
以上是如何解决实体框架无法翻译Double.Parse()的问题?的详细内容。更多信息请关注PHP中文网其他相关文章!