2010-07-07 87 views
1

在最简洁的方式下获取返回值和结果集(不将参考参数传递给存储过程)寻求建议。是否有可能使用LINQ从存储过程返回返回值和结果集

我存储过程有返回值来显示错误等,他们结束与选择语句来获取信息。使用常规命令,我会创建一个输出参数来保存返回值。我无法更改存储过程中的分贝,所以我不能通过一个不同的输出参数,除了返回值。

想法??

回答

3

当您通过从服务器浏览器中将其拖动到LINQ to SQL数据上下文设计器中创建存储过程时,设计人员将分析存储过程以确定它是否返回结果集。除非它具有大量的动态SQL,否则通常会出现。

如果是这样,该方法生成的回报ISingleResult<T>其中T是从您的存储过程的分析产生的一类,以适应在结果集的形状,或者一个你在存储过程的属性页中指定。因为ISingleResult来自IEnumerable,所以大多数人对结果做了简单的foreach以获得结果集。但大多数人忘记的是ISingleResult派生自IFunctionResult,其中有一个属性ReturnValue这是sproc的返回值。

因此,所有你需要做的是沿着线的东西:

using(var dc = new MyDataContext()) 
{ 
    var results = dc.MyStoredProcedure(); 
    var returnValue = (int)results.ReturnValue; // note that ReturnValue is of type object and must be cast. 
    foreach(var row in results) 
    { 
     // process row 
    } 
} 
+0

我相信这是我以前做什么,但问题是,这些存储的特效,现在返回的自定义类型,因此它不” t自动创建自定义类型中的返回值。我会看看是否可以使用泛型var类型,然后通过代码转换为自定义类型。 – Adam 2010-07-07 19:27:17

+0

@Adam:当你说“返回自定义类型”时,你的意思是返回值还是结果集? – Randolpho 2010-07-07 19:59:30

+0

我的意思是结果集...我只是看着旧的条目,所以这不再是一个问题。我想我刚结束使用var类型的结果集,因为我不能让它使用自定义返回类型的结果,并仍然有一个“返回值”作为该返回类型的一部分。 – Adam 2011-01-14 00:30:39