如何使用Linq to SQL从存储过程中检索多行?
我最近开始使用Linq to SQL,并想知道如何通过执行存储过程获得多行,下面是一个简单的sp:如何使用Linq to SQL从存储过程中检索多行?,sql,linq,linq-to-sql,stored-procedures,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 从management stu
CREATE PROCEDURE gsp_ftsmultiple
@SearchKey varchar(100)
AS
BEGIN
SET NOCOUNT ON;
SELECT Label, theContent
FROM FtsTest
WHERE FREETEXT( theContent, @SearchKey )
END
从management studio执行此sp很好,但生成的上下文类中的相应方法返回int值,我不知道如何获取实际行,尝试使用OUT参数,但它们只能返回一个结果。您最好只运行查询本身,因为你没有真正做任何需要程序的事情。只需确保正确转义搜索键。您最好只运行查询本身,因为您并没有真正执行任何需要过程的操作。只需确保正确转义搜索键。尝试将全文谓词创建为包装函数,而不是存储过程,如。为我工作。尝试将全文谓词创建为包装函数,而不是存储过程,如。为我工作。我认为您需要做的就是创建一个与结果模式匹配的类,并确保dbml中的函数将其作为返回类型
请参见msdn上的我认为您需要做的就是创建一个与结果模式匹配的类,并确保dbml中的函数将其作为返回类型
请参见msdn上的当
sqlmetal
生成此过程的代码时,它不会传递有效参数以使查询正常工作
尝试在SP顶部放置类似的内容:
IF @SearchKey IS NULL OR LEN(@SearchKey) = 0
BEGIN
SELECT N'' AS Label, N'' AS theContent WHERE 1 = 0
END
[...]
现在可以推断2个NVARCHAR列是通常的输出,并相应地生成代码
还有,我头上的代码,未经测试
Mike当
sqlmetal
生成此过程的代码时,它不会传递有效参数以使查询正常工作
尝试在SP顶部放置类似的内容:
IF @SearchKey IS NULL OR LEN(@SearchKey) = 0
BEGIN
SELECT N'' AS Label, N'' AS theContent WHERE 1 = 0
END
[...]
现在可以推断2个NVARCHAR列是通常的输出,并相应地生成代码
还有,我头上的代码,未经测试
Mike我测试了下面的代码片段,效果很好。如果您将生成的代码放在这里,我可以查看并检查问题出在哪里。无论如何,您可以创建一个与生成的数据上下文类同名的分部类,并手动添加所需的方法,如下所示
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;
}
}
公共部分类FooDataContext:System.Data.Linq.DataContext
{
[System.Data.Linq.Mapping.Function(Name=“GetFoo”)]
public System.Data.Linq.ISingleResult GetFoo()
{
System.Data.Linq.IExecuteResult res=base.ExecuteMethodCall(this,(System.Reflection.MethodInfo)System.Reflection.MethodInfo.GetCurrentMethod());
return(System.Data.Linq.ISingleResult)res.ReturnValue;
}
}
我测试了以下代码片段,效果很好。如果您将生成的代码放在这里,我可以查看并检查问题出在哪里。无论如何,您可以创建一个与生成的数据上下文类同名的分部类,并手动添加所需的方法,如下所示
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;
}
}
公共部分类FooDataContext:System.Data.Linq.DataContext
{
[System.Data.Linq.Mapping.Function(Name=“GetFoo”)]
public System.Data.Linq.ISingleResult GetFoo()
{
System.Data.Linq.IExecuteResult res=base.ExecuteMethodCall(this,(System.Reflection.MethodInfo)System.Reflection.MethodInfo.GetCurrentMethod());
return(System.Data.Linq.ISingleResult)res.ReturnValue;
}
}
FYI:最好留作评论。感谢您的回复,但由于我想使用全文搜索,而且Linq to SQL不直接支持此功能,因此我必须使用sp。请参阅我的答案,这是因为FREETEXT()Visual Studio调用SP并尝试生成LINQ 2 SQL代码时失败。仅供参考:最好留作评论。感谢您的回复,但由于我想使用全文搜索,并且LINQ to SQL不直接支持此功能,因此我必须使用SP。请参阅我的回答,这是因为FREETEXT()Visual Studio调用SP并尝试生成LINQ 2 SQL代码时失败。谢谢,也是db的新手,不太了解您,但我会尝试解决它。谢谢,也是db的新手,不太了解您,但我会尝试解决它。