是否可以使用LINQ从存储过程返回返回值和结果集

时间:2010-07-07 02:09:55

标签: c# sql linq linq-to-sql stored-procedures

寻找有关获取返回值和结果集的最干净方法的建议(不将引用的参数传递给存储的proc)。

我的存储过程有返回值以显示错误等,它们以select语句结束以获取信息。使用常规命令,我将创建一个输出参数,该参数将保存返回值。我无法更改db中的存储过程,因此除了返回值之外,我无法传递不同的输出参数。

想法??

1 个答案:

答案 0 :(得分:3)

当您在LINQ to SQL数据上下文设计器中通过从服务器资源管理器中拖动它来创建存储过程时,设计器将分析该sproc以确定它是否返回结果集。除非它具有繁重的动态SQL,否则它通常会被发现。

如果是,则生成的方法返回ISingleResult<T>,其中T是从您的sproc分析生成的类以适合结果集的形状,或者您在sproc属性中指定的类页。由于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
    }
}