mcq*_*rty 8 linq-to-entities user-defined-functions entity-framework-4 entity-framework-4.1
我的数据库中有一个标量值函数:
ALTER FUNCTION [dbo].[fx_fooFunct]
(@MyParam varchar(max))
RETURNS varchar(max)
AS
BEGIN
return @MyParam
END
Run Code Online (Sandbox Code Playgroud)
我想从LINQ to Entities查询中调用此函数,并将结果转换为变量:
let result = this.ObjectContext.ExecuteFunction<string>("SELECT dbo.fx_fooFunct(@MyParam)", new ObjectParameter("MyParam", "hello world")).FirstOrDefault()
Run Code Online (Sandbox Code Playgroud)
但是,当我执行代码时,我收到此错误:
LINQ to Entities无法识别方法'System.Data.Objects.ObjectResult`1 [System.String] ExecuteFunction [String](System.String,System.Data.Objects.ObjectParameter [])'方法,而且此方法不能翻译成商店表达.
其他信息:
这是在服务器上运行的所有查询的一部分.
由于性能原因,返回所有数据并使用LINQ to Objects不是一个选项.
我不确定我的返回类型ExecuteFunction是否正确,但我不确定它还能做什么......我做错了什么?
编辑
在Ladislav Mrnka的回答的帮助下,这是解决方案:
创建公开SQL函数的辅助方法:
public class CustomSqlFunctions
{
[EdmFunction("MyModel.Store", "fx_fooFunct")]
public static string FooFunct(string myParam)
{
throw new NotSupportedException("Direct calls not supported");
}
}
Run Code Online (Sandbox Code Playgroud)
LINQ现在应该是:
let result = CustomSqlFunctions.FooFunct("hello world")
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
11530 次 |
| 最近记录: |