我有一个可能会收集数百万行的SP,此SP由Dynamic SQL生成此结果集。但是,从LINQ调用SP,LINQ无法识别此SP应返回的列。
如果我创建一个临时表,LINQ会识别但是我不确定SP是否必须先填充该TEMP表才能给出控制权,或者它与SP中的临时表没有区别。
意思是,使用临时表以便LINQ可以识别列会降低性能,还是表现得与我不使用临时表的行为不同?
如果我不使用临时表,那么LINQ无法获取列,因此这是一个窘境。
感谢您的任何建议!
答案 0 :(得分:0)
试试这个
SET FMTONLY ON
EXEC dbo.yourProc
SET FMTONLY OFF
这就是Linq-to-Sql将如何调用你的proc以确定列名。此外,如果proc有任何参数,Linq-to-Sql将发送空值。
如果出现此错误,或者没有产生任何结果,Linq-to-Sql将无法使用proc的结果。你应该能够从这里调整它以使其运行。
答案 1 :(得分:0)
不是创建存储过程以返回结果集,而是尝试使用表值函数。
在表值函数中,您声明了预期返回的表结构,以便LINQ能够使用它。
有关表值函数的更多信息,请访问:http://msdn.microsoft.com/en-us/library/ms191165.aspx
将它们与LINQ:http://msdn.microsoft.com/en-us/library/bb386954.aspx
一起使用希望这有帮助!