В моей БД есть функция со скалярным значением:
ALTER FUNCTION [dbo].[fx_fooFunct]
(@MyParam varchar(max))
RETURNS varchar(max)
AS
BEGIN
return @MyParam
END
Я хочу вызвать эту функцию из запроса LINQ to Entities и получить результат в переменную:
let result = this.ObjectContext.ExecuteFunction<string>("SELECT dbo.fx_fooFunct(@MyParam)", new ObjectParameter("MyParam", "hello world")).FirstOrDefault()
Но, когда я выполняю код, я получаю эту ошибку:
LINQ to Entities не распознает метод 'System.Data.Objects.ObjectResult`1 [System.String] ExecuteFunction [String] (System.String, System.Data.Objects.ObjectParameter []) ', и этот метод нельзя преобразовать в выражение хранилища.
Другая информация:
Эточасть всего запроса, выполняемого на сервере.
Возврат всех данных и использование LINQ to Objects не вариант из-за производительности.
Я не уверен, что у меня есть тип возвратаExecuteFunction
правильно, но я не уверен, что еще это может быть ... Что я делаю не так?
Редактировать
С помощью ответа Ладислава МрнкиВот решение:
Создать вспомогательный метод, предоставляющий функцию SQL:
public class CustomSqlFunctions
{
[EdmFunction("MyModel.Store", "fx_fooFunct")]
public static string FooFunct(string myParam)
{
throw new NotSupportedException("Direct calls not supported");
}
}
LINQ должен теперь читать:
let result = CustomSqlFunctions.FooFunct("hello world")