尝试运行包含实体框架数据库引擎不支持的方法的 LINQ 表达式时,会发生此错误。在本例中,导致错误的方法是 Double.Parse(string)。
在提供的代码中,在以下语句中遇到错误:
model.Referring = Math.Round(_newSurveyResult.Select(m => string.IsNullOrEmpty(m.Question1) ? 0 : Double.Parse(m.Question1)).Average());
实体框架将 LINQ 表达式转换为 SQL 查询以在数据库上执行。但是,Double.Parse 方法不是标准 SQL 函数,无法直接转换为 SQL。
要解决此问题,您可以在 Entity 中定义自定义函数可以翻译为等效的 SQL 表达式的框架模型。在本例中,我们将定义一个名为 ParseDouble 的函数。
打开模型的 *.edmx 文件并找到
<Function Name="ParseDouble" ReturnType="Edm.Double"> <Parameter Name="stringvalue" Type="Edm.String" /> <DefiningExpression> cast(stringvalue as Edm.Double) </DefiningExpression> </Function>
接下来,为您的 ObjectContext 类创建一个分部类并向其中添加以下方法:
using System.Data.Objects.DataClasses; public partial class YourObjectContext { /// <summary> /// This method exists for use in LINQ queries, /// as a stub that will be converted to a SQL CAST statement. /// </summary> [EdmFunction("YourModel", "ParseDouble")] public static double ParseDouble(string stringvalue) { return Double.Parse(stringvalue); } }
定义并实现自定义函数后,您可以更新 LINQ 表达式以使用it:
model.Referring = Math.Round(_newSurveyResult.Select(m => string.IsNullOrEmpty(m.Question1) ? 0 : YourObjectContext.ParseDouble(m.Question1)).Average());
现在,LINQ 表达式应该成功转换为可由数据库引擎执行的 SQL 查询。
以上是如何解决'LINQ to Entities 无法识别方法'Double.Parse'”错误?的详细内容。更多信息请关注PHP中文网其他相关文章!