是否可以在LINQPad中使用LINQ调用存储过程?

时间:2010-11-10 21:50:46

标签: c# linq stored-procedures linqpad

在visual studio中,你有一个漂亮的设计师用一个漂亮的小方法封装存储过程。我非常喜欢LINQPad并且每天都在工作中使用它(因为我一直在使用它,所以不需要为我的工作打开SQL Studio!)并且想在使用它时调用存储过程。

我害怕我知道自己问题的答案,但我希望可能有一个我缺少的功能,或者也许某人有一些黑魔法,他们可以借此让我这样做。顺便说一句,如果有所不同,我正在使用LINQPad 4.

修改
请参阅下面的答案。

7 个答案:

答案 0 :(得分:23)

至少在我的LINQPad副本中,存储过程显示在数据库树视图中,可以直接调用。

以下是截图:

Screenshot

答案 1 :(得分:16)

总结其他一些答案以及添加一些额外信息:

使用默认(LINQ to SQL)驱动程序连接到数据源。确保选中包含存储过程和函数复选框。

现在,在使用连接的查询中,存储过程和函数可用作.NET函数(例如C#)。函数所需的参数反映了存储过程或数据库函数所需的参数。

函数返回的值是ReturnDataSet,它是从DataSet派生的LINQPad类型。不幸的是,在数据集上执行LINQ查询并不容易,但LINQPad提供了扩展方法AsDynamic(),它将获取返回数据集的第一个表(通常只有一个表)并将行转换为{{ 1}}集合中的对象是动态的,允许您将列值作为属性进行访问。例如。如果存储过程返回列IEnumerable<Object>Id,则可以使用LINQ:

Name

不幸的是,你没有intellisense,因为行对象是动态的。

答案 2 :(得分:9)

我的回答(在Daniel的帮助下,谢谢。)

Daniel帮助我意识到,如果使用查询窗口中的下拉列表来定位数据库,则可以调用存储过程。然后在查询窗口中通过其名称调用存储的proc并将括号添加到末尾以将其作为函数调用。

当前版本(我在此日期使用4.26.2)之间的主要区别在于VS中的LINQ返回自定义数据类型以匹配从存储过程返回的数据对象,LINQPad返回DataSet。因此,通过选择“C#Statement(s)”,您可以成功地将其作为查询运行:

DataSet fooResults = foo_stored_proc(myParam);

感谢大家的帮助!

答案 3 :(得分:0)

我正在使用4.51.03版本并连接到SQL Server 2012 Express版。连接到AdventureWorks2012数据库后,我可以看到所有存储过程。右键单击存储过程并选择 StoredProceedureName(...)下拉列表,可以在查询窗口中显示存储过程。您需要在包含省略号的括号内插入参数并运行查询。

示例见以下两篇文章:

http://hodentekmsss.blogspot.com/2015/01/learn-querying-sql-server-2012-using.html

http://hodentekmsss.blogspot.com/2015/01/learn-querying-sql-server-2012-using_25.html

答案 4 :(得分:0)

示例:假设我有一个名为PersonMatchNoDOBRequired的存储过程,它希望我传递名字和姓氏

var b = PersonMatchNoDOBRequired("John", "Smith").AsDynamic();
b.Dump();

如果我想进一步过滤(在我的情况下,我在sql中有一个对名字和姓氏进行评分的高级算法,名字可以返回“ Jodi”,但是说我真的很想进一步过滤它,如下所示:

var b = PersonMatchNoDOBRequired("John", "Smith").AsDynamic().Where(x => x.FirstName == "John" && x.LastName == "Smith");   

其他答案部分正确-我没有看到任何传递的参数(如果需要)。

答案 5 :(得分:0)

使用@jlafay使用的示例,您可以从表中获取行并按名称引用列。

DataSet spItem = sp_StoredProcedure(parameters);
var rows = spItem.Tables[0].Rows;
foreach (DataRow row in rows)
{
   // Do something
   Console.WriteLine($"{row["MyColumn"]}, {row["LastName"]}");
} 

答案 6 :(得分:-1)

您可以使用标准ADO.NET对象(SqlConnectionSqlCommand等)和Dump()结果来保存使用C#的查询。

我意识到它不是在使用LINQ,但它对我很有帮助。

相关问题