Entity framework 4 实体框架&x2B;advantage数据库:转换可为null的数字类型

Entity framework 4 实体框架&x2B;advantage数据库:转换可为null的数字类型,entity-framework-4,advantage-database-server,Entity Framework 4,Advantage Database Server,我正在使用VS2010、实体框架4.0和Advantage v。10在我的申请表中。我编写了一个LINQtoEntities(L2E)语句,试图将可为空的数字(decimal)类型转换为十进制。一个简单的语句可能如下所示: var x = (from test in entities.Tests select test.ValueA.HasValue ? test.ValueA.Value : 0); 但是,我收到以下错误: System.Data.EntityCommand

我正在使用VS2010、实体框架4.0和Advantage v。10在我的申请表中。我编写了一个LINQtoEntities(L2E)语句,试图将可为空的数字(decimal)类型转换为十进制。一个简单的语句可能如下所示:

var x = (from test in entities.Tests
         select test.ValueA.HasValue ? test.ValueA.Value : 0);
但是,我收到以下错误:

System.Data.EntityCommandExecutionException:执行命令定义时出错。有关详细信息,请参见内部异常。-->Advantage.Data.Provider.AdsException:错误7200:AQE错误:状态=S0000;NativeError=2159;[iAnywhere Solutions][Advantage SQL Engine]标量函数的参数无效:强制转换-必须同时指定精度和比例。-SQL语句中的错误位置为:xxx(行:x列:x)AdsCommand查询执行失败

除了列举结果和在客户端进行转换之外,还有什么方法可以解决这个问题吗?我不知道如何通过L2E语句告诉Advantage“0”的精度和范围


提前感谢。

您的EF提供程序生成了错误的SQL,这是提供程序中的一个错误

但是,您可能可以解决此问题:

var x = entities.Tests
                .Select(t => t.ValueA)
                .AsEnumerable()
                .Select(t => t.GetValueOrDefault());

您的EF提供程序生成了错误的SQL,这是提供程序中的一个错误

但是,您可能可以解决此问题:

var x = entities.Tests
                .Select(t => t.ValueA)
                .AsEnumerable()
                .Select(t => t.GetValueOrDefault());

正如Craig提到的,这是Advantage Entity Framework Provider中的一个bug。它将在Advantage Entity Framework Provider的下一个服务版本中修复

另一种可能的解决方法是公开数据库的IsNULL函数。将以下内容添加到SSDL中

 <Function Name="IsNull" ReturnType="numeric" Aggregate="false" BuiltIn="true" NiladicFunction="false" IsComposable="true" ParameterTypeSemantics="AllowImplicitConversion">
    <Parameter Name="Value" Type="numeric" Mode="In"/>
    <Parameter Name="Default" Type="integer" Mode="In"/>
 </Function>

正如Craig提到的,这是Advantage Entity Framework Provider中的一个bug。它将在Advantage Entity Framework Provider的下一个服务版本中修复

另一种可能的解决方法是公开数据库的IsNULL函数。将以下内容添加到SSDL中

 <Function Name="IsNull" ReturnType="numeric" Aggregate="false" BuiltIn="true" NiladicFunction="false" IsComposable="true" ParameterTypeSemantics="AllowImplicitConversion">
    <Parameter Name="Value" Type="numeric" Mode="In"/>
    <Parameter Name="Default" Type="integer" Mode="In"/>
 </Function>

prob此转换不起作用。但是你试过类似的方法。选择测试值??0我可能在某个地方丢失了一个演员阵容,但如果你能将其翻译出来,可能就可以了。有时候改变语法会让事情顺利进行。zeeshanhirani,是的,我试过了??语法。不幸的是,它不起作用。使用LanceSc建议的IsNull函数是一种可行的解决方法。无论如何谢谢你!prob此转换不起作用。但是你试过类似的方法。选择测试值??0我可能在某个地方丢失了一个演员阵容,但如果你能将其翻译出来,可能就可以了。有时候改变语法会让事情顺利进行。zeeshanhirani,是的,我试过了??语法。不幸的是,它不起作用。使用LanceSc建议的IsNull函数是一种可行的解决方法。无论如何谢谢你!