【问题标题】:Is it possible to return a return value and a result set from a stored procedure using LINQ是否可以使用 LINQ 从存储过程返回返回值和结果集
【发布时间】:2010-07-07 02:09:54
【问题描述】:

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

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

想法??

【问题讨论】:

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


    【解决方案1】:

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

    如果是,则生成的方法返回ISingleResult<T>,其中T 是通过分析存储过程生成的类以适应结果集的形状,或者是您在存储过程属性页面中指定的类。因为ISingleResult 派生自IEnumerable,所以大多数人对结果进行简单的foreach 以获得他们的结果集。但大多数人忘记的是ISingleResult 派生自IFunctionResult,它有一个名为ReturnValue 的属性。 这是存储过程的返回值。

    所以你所要做的就是:

    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
        }
    }
    

    【讨论】:

    • 我相信这是我之前所做的,但问题是这些存储的过程现在正在返回自定义类型,因此它不会自动在自定义类型中创建返回值。我会看看我是否可以使用通用 var 类型然后通过代码转换为自定义类型。
    • @Adam:你说“返回自定义类型”是指返回值还是结果集?
    • 我的意思是结果集...我只是在查看旧条目,所以这不再是问题。我想我只是最终将 var 类型用于结果集,因为我无法让它为结果使用自定义返回类型,并且仍然有一个“返回值”作为该返回类型的一部分。
    猜你喜欢
    • 1970-01-01
    • 2019-06-20
    • 1970-01-01
    • 1970-01-01
    • 2016-03-27
    • 1970-01-01
    • 1970-01-01
    • 2023-04-06
    • 1970-01-01
    相关资源
    最近更新 更多