【问题标题】:How to retrieve multiple rows from a stored procedure with Linq to SQL?如何使用 Linq to SQL 从存储过程中检索多行?
【发布时间】:2009-12-27 04:56:04
【问题描述】:

我最近开始使用 Linq to SQL,想知道如何通过执行存储过程来获取多行,这是我想要使用的简单 sp:

CREATE PROCEDURE gsp_ftsmultiple
  @SearchKey varchar(100)
AS

BEGIN

  SET NOCOUNT ON;

  SELECT Label, theContent 
    FROM FtsTest 
   WHERE FREETEXT( theContent, @SearchKey )

END

从管理工作室执行这个sp是可以的,但是生成的上下文类中的对应方法返回一个int值,我不知道如何获取实际行,尝试使用OUT参数,但它们只能返回一个结果。

【问题讨论】:

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


    【解决方案1】:

    我认为您需要做的就是创建一个与您的结果架构匹配的类,并确保 dbml 中的函数将其作为返回类型。

    在 msdn 上查看 here

    【讨论】:

      【解决方案2】:

      尝试将全文谓词创建为包装函数而不是存储过程,例如this。为我工作。

      【讨论】:

        【解决方案3】:

        sqlmetal 生成此过程的代码时,它没有传递有效的参数以使查询工作。

        试着把这样的东西放在你的 SP 上:

        IF @SearchKey IS NULL OR LEN(@SearchKey) = 0
        BEGIN
            SELECT N'' AS Label, N'' AS theContent WHERE 1 = 0
        END
        
        [...]
        

        现在它会推断出 2 个 NVARCHAR 列是通常的输出并相应地生成代码

        附言。代码离开我的脑袋,未经测试

        迈克

        【讨论】:

        • 谢谢,也是 db 的新手,不太关注你,但我会努力弄清楚的。
        【解决方案4】:

        我测试了以下代码 sn-p 并且运行良好。如果你把生成的代码放在这里,我可以看看,看看问题出在哪里。无论如何,您可以创建一个与生成的数据上下文类同名的部分类,并手动添加所需的方法,如下所示。

        public partial class FooDataContext: System.Data.Linq.DataContext
        {
        
            [System.Data.Linq.Mapping.Function(Name = "GetFoo")]
            public System.Data.Linq.ISingleResult<Foo> GetFoo()
            {
                System.Data.Linq.IExecuteResult res = base.ExecuteMethodCall(this, (System.Reflection.MethodInfo)System.Reflection.MethodInfo.GetCurrentMethod());
                return (System.Data.Linq.ISingleResult<Foo>)res.ReturnValue;
            }
        
        }
        

        【讨论】:

          【解决方案5】:

          您最好只运行查询本身,因为您实际上并没有做任何需要过程的事情。只需确保正确转义搜索键即可。

          【讨论】:

          • 仅供参考:最好留下评论。
          • 感谢您的回复,但是由于我想使用全文搜索,而Linq to SQL没有直接支持这个功能,所以我必须使用sp。
          • 查看我的回答,这是因为当 Visual Studio 调用 SP 并尝试生成 LINQ 2 SQL 代码时 FREETEXT() 失败。
          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2023-03-02
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2014-06-22
          • 1970-01-01
          相关资源
          最近更新 更多