LINQ to SQL调用使用动态SQL的存储过程

时间:2011-09-02 16:03:44

标签: linq-to-sql stored-procedures

我正在尝试使用LINQ连接到SQL存储过程。它对于具有静态SQL查询的存储过程非常有用。

我想连接到具有动态SQL的存储过程。

在存储过程结束时,它有一个exec语句。

exec(@srchQuery) 

当我这样做时,它不起作用,因为它是动态SQL。

如果我使用print @srchQuery并复制该存储过程并在存储过程中使用该静态SQL,则没有问题。

2 个答案:

答案 0 :(得分:2)

LINQ to SQL分析直接SELECT语句,以查看它作为执行所述SQL存储过程的结果而必须投影的模型类型。因为您使用EXEC使用动态语句,所以无法确定要生成的模型类型。

简单的答案是要么不使用存储过程,而是使用LINQ to SQL生成SQL,或者不要在存储过程中使用动态构建语句。

您生成SQL语句的事实必然意味着您有一个强大的用例,因为它可以在没有存储过程的情况下实现您想要的。总是喜欢简单...问问自己,你需要在存储过程中使用动态构建的语句吗?

答案 1 :(得分:0)

直接在DataContext中调用存储过程:

using (YourDataContext dc = new YourDataContext())
{
    ...
    dc.ExecuteCommand("EXEC MyStoredProcedure");
    ...
}