Tôi có một hàm vô hướng có giá trị trong DB của tôi:Làm thế nào để gọi hàm vô hướng có giá trị từ LINQ to Entities server-side
ALTER FUNCTION [dbo].[fx_fooFunct]
(@MyParam varchar(max))
RETURNS varchar(max)
AS
BEGIN
return @MyParam
END
Tôi muốn gọi chức năng này từ một LINQ to Entities truy vấn và nhận được kết quả vào một biến:
let result = this.ObjectContext.ExecuteFunction<string>("SELECT dbo.fx_fooFunct(@MyParam)", new ObjectParameter("MyParam", "hello world")).FirstOrDefault()
Nhưng, khi tôi thực thi mã, tôi nhận được lỗi này:
LINQ to Entities does not recognize the method 'System.Data.Objects.ObjectResult`1[System.String] ExecuteFunction[String](System.String, System.Data.Objects.ObjectParameter[])' method, and this method cannot be translated into a store expression.
tôi khác nfo:
Đây là một phần tất cả truy vấn đang chạy trên máy chủ.
Trả lại tất cả dữ liệu và sử dụng LINQ to Objects không phải là một tùy chọn do hiệu suất.
Tôi không chắc rằng tôi có loại trả về là ExecuteFunction
chính xác, nhưng tôi không chắc chắn điều gì khác có thể là ... Tôi đang làm gì sai?
Sửa
Với sự giúp đỡ của câu trả lời Ladislav Mrnka của, đây là giải pháp:
Tạo phương pháp helper để lộ hàm SQL:
public class CustomSqlFunctions
{
[EdmFunction("MyModel.Store", "fx_fooFunct")]
public static string FooFunct(string myParam)
{
throw new NotSupportedException("Direct calls not supported");
}
}
Các LINQ bây giờ sẽ đọc:
let result = CustomSqlFunctions.FooFunct("hello world")
Tuyệt vời, cảm ơn rất nhiều. Tôi đã cập nhật câu hỏi của mình với giải pháp. – mcqwerty