如何使用Linq到SQL从存储过程中检索多个行?

时间:2009-12-27 04:56:05

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

我最近开始使用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参数,但它们只能返回一个结果。

5 个答案:

答案 0 :(得分:1)

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

请参阅msdn上的here

答案 1 :(得分:0)

尝试将全文谓词创建为包装函数而不是像this那样的sprocs。为我工作。

答案 2 :(得分:0)

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

尝试将这样的东西放在SP的顶部:

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

[...]

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

PS。编码我的头,未经测试

麦克

答案 3 :(得分:0)

我测试了以下代码片段,它工作正常。如果你把生成的代码放在这里,我可以看看并检查问题出在哪里。无论如何,您可以创建一个与生成的数据上下文类同名的部分类,并按如下方式手动添加所需的方法。

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

}

答案 4 :(得分:-1)

你可能最好只运行查询本身,因为你没有真正做任何需要程序的事情。只需确保正确地转义搜索键。