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

Jef*_*Fay 21 c# linq stored-procedures linqpad

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

我担心我知道自己问题的答案,但是我希望可能有一个我缺少的功能,或者也许某人有一些黑魔法,他们可以借给我来实现这个目标.顺便说一下,如果有所不同,我正在使用LINQPad 4.

编辑
请参阅下面的答案.

Dan*_*den 25

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

这是一个截图:

截图


Mar*_*age 19

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

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

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

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

SomeStoredProc().AsDynamic().Where(row => row.Id == 123 && row.Name == "Foo")
Run Code Online (Sandbox Code Playgroud)

不幸的是,你不会有智能感知,因为行对象是动态的.


Jef*_*Fay 9

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

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

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

DataSet fooResults = foo_stored_proc(myParam);
Run Code Online (Sandbox Code Playgroud)

谢谢大家的帮助!