Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/296.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 数据库第一个LINQ to EF6函数在中工作。选择但不选择独立_C#_Entity Framework_Linq - Fatal编程技术网

C# 数据库第一个LINQ to EF6函数在中工作。选择但不选择独立

C# 数据库第一个LINQ to EF6函数在中工作。选择但不选择独立,c#,entity-framework,linq,C#,Entity Framework,Linq,我使用的是一个数据库优先的EF6模型,其中包含一些标量值函数,但我发现它的工作方式与我预期的不一样。SQL函数定义为: dbo.GetCurrentPayOffAmountFunction(@ApplicationID int, @PayOffDate DateTime) Returns decimal(18,2) 在.edmx中,我使用: <Function Name="GetCurrentPayOffAmountFunction" Aggregate="false" Buil

我使用的是一个数据库优先的EF6模型,其中包含一些标量值函数,但我发现它的工作方式与我预期的不一样。SQL函数定义为:

dbo.GetCurrentPayOffAmountFunction(@ApplicationID int, @PayOffDate DateTime)
Returns decimal(18,2)
在.edmx中,我使用:

    <Function Name="GetCurrentPayOffAmountFunction" Aggregate="false" BuiltIn="false" NiladicFunction="false" IsComposable="true" ParameterTypeSemantics="AllowImplicitConversion" Schema="dbo" ReturnType="decimal">
      <Parameter Name="ApplicationID" Type="int" Mode="In" />
      <Parameter Name="PayOffDate" Type="datetime" Mode="In" />
    </Function>
(“上面的“应用程序”可以是我数据库中的任何表,并且该函数返回正确的值,而不管我实际使用的是select左侧的什么)

但是,当我尝试在没有查询的情况下运行函数时,例如:

decimal payoffAmount = db.GetCurrentPayOffAmountFunction(1000, DateTime.Now);
我总是会出错:

InvalidOperationException:从具体化 “System.String”类型的“System.Decimal”类型无效


现在,我可以使用第一种方法来获取我的值,它工作得很好,但是我觉得获取一个随机项只是为了调用我的函数是错误的。有人见过这个吗?我做错了什么?

如果这样做会发生什么-
decimal payoffAmount=db.GetPayOffAmountFunction(1000,DateTime.Now).FirstOrDefault()?我还发现您调用了错误的函数。您正在显示GetCurrentPayOffAmountFunction()的代码,而在LINQ中您正在调用GetPayOffAmountFunction()。您的问题可能与此类似:我们有GetPayOffAmountFunction和GetCurrentPayOffAmountFunction,它们采用完全相同的参数并返回相同的类型。我只是抄错了,把帖子改了。谢谢FirstOrDefault()导致“'decimal'不包含'FirstOrDefault'的定义,并且找不到接受类型为'decimal'的第一个参数的扩展方法'FirstOrDefault'。如果执行-
decimal payoffAmount=db.getPayoffamount函数(1000,DateTime.Now)。FirstOrDefault()?我还发现您调用了错误的函数。您正在显示GetCurrentPayOffAmountFunction()的代码,而在LINQ中您正在调用GetPayOffAmountFunction()。您的问题可能与此类似:我们有GetPayOffAmountFunction和GetCurrentPayOffAmountFunction,它们采用完全相同的参数并返回相同的类型。我只是抄错了,把帖子改了。谢谢FirstOrDefault()导致“'decimal'不包含'FirstOrDefault'的定义,并且找不到接受'decimal'类型的第一个参数的扩展方法'FirstOrDefault'。
decimal app = db.Applications.Take(1).Select (a => db.GetCurrentPayOffAmountFunction(1000, DateTime.Now)).FirstOrDefault();
decimal payoffAmount = db.GetCurrentPayOffAmountFunction(1000, DateTime.Now);