22

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

恐怕我知道自己问题的答案,但我希望也许我缺少一个功能,或者也许有人有一些黑魔法,他们可以借给我来实现这一点。顺便说一句,如果这有所作为,我正在使用 LINQPad 4。

编辑
请参阅下面的我的答案。

4

7 回答 7

27

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

这是一个屏幕截图:

截屏

于 2010-11-10T23:23:43.813 回答
22

总结其他一些答案并添加一些附加信息:

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

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

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

SomeStoredProc().AsDynamic().Where(row => row.Id == 123 && row.Name == "Foo")

不幸的是,您将没有智能感知,因为行对象是动态的。

于 2013-10-14T13:07:51.807 回答
11

我的回答(在丹尼尔的帮助下,谢谢。)

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

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

DataSet fooResults = foo_stored_proc(myParam);

感谢大家的帮助!

于 2010-11-11T19:39:00.513 回答
2

使用@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"]}");
} 
于 2019-08-20T19:55:03.580 回答
1

示例:假设我调用了一个存储过程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");   

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

于 2019-06-19T20:16:20.613 回答
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

于 2015-01-26T02:13:25.743 回答
-1

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

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

于 2010-11-10T21:55:49.527 回答