首页 >后端开发 >C++ >如何解决'LINQ to Entities 无法识别方法'Double.Parse'”错误?

如何解决'LINQ to Entities 无法识别方法'Double.Parse'”错误?

Linda Hamilton
Linda Hamilton原创
2024-12-28 22:10:11253浏览

How to Resolve the

错误解释:“LINQ to Entities 无法识别方法 'Double Parse(System.String)' 方法,并且此方法无法转换为存储表达式”

尝试运行包含实体框架数据库引擎不支持的方法的 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 文件中的实体 SQL 定义

打开模型的 *.edmx 文件并找到 ;元素。在 中添加以下函数定义: element:

    <Function Name="ParseDouble" ReturnType="Edm.Double">
        <Parameter Name="stringvalue" Type="Edm.String" />
        <DefiningExpression>
            cast(stringvalue as Edm.Double)
        </DefiningExpression>
    </Function>

ObjectContext 类中的自定义方法

接下来,为您的 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 表达式

定义并实现自定义函数后,您可以更新 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中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn