Можно ли вызвать хранимую процедуру с помощью LINQ в LINQPad? - PullRequest
21 голосов
/ 11 ноября 2010

В visual studio у вас есть хороший дизайнер, который инкапсулирует хранимый процесс изящным маленьким методом. Я полностью люблю LINQPad и использую его каждый день на работе (у меня не было необходимости открывать SQL Studio для моей работы, так как я его использую!) И хотел бы вызывать хранимые процедуры при его использовании.

Боюсь, я знаю ответ на свой вопрос, но я надеюсь, что, возможно, мне не хватает какой-то функции или, возможно, у кого-то есть какая-то черная магия, которую они могут одолжить мне, чтобы это произошло. Кстати, я использую LINQPad 4, если это имеет значение.

Редактировать
Смотрите мой ответ ниже.

Ответы [ 6 ]

23 голосов
/ 11 ноября 2010

По крайней мере, в моей копии LINQPad хранимые процедуры отображаются в древовидной структуре базы данных и могут быть вызваны напрямую.

Вот скриншот:

Screenshot

17 голосов
/ 14 октября 2013

Подводя итог некоторым другим ответам, а также добавляя немного дополнительной информации:

Подключитесь к источнику данных с помощью драйвера Default (LINQ to SQL) . Убедитесь, что установлен флажок Включить хранимые процедуры и функции .

Хранимые процедуры и функции теперь доступны в виде функций .NET (например, C #) в запросах с использованием соединения. Параметры, требуемые функцией, отражают параметры, требуемые хранимой процедурой или функцией базы данных.

Значением, возвращаемым функцией, является ReturnDataSet, тип LINQPad, производный от DataSet. К сожалению, выполнить запросы LINQ для наборов данных не так просто, но LINQPad предоставляет метод расширения AsDynamic(), который будет принимать первую таблицу возвращенного набора данных (обычно это только одна таблица) и преобразовывать строки в IEnumerable<Object>, где объекты в коллекции являются динамическими, что позволяет получить доступ к значениям столбца в качестве свойств. Например. если ваша хранимая процедура возвращает столбцы Id и Name, вы можете использовать LINQ:

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

К сожалению, у вас не будет intellisense, потому что объекты строк являются динамическими.

9 голосов
/ 11 ноября 2010

Мой ответ (С помощью Даниэля, спасибо.)

Даниэль помог мне понять, что хранимые процедуры можно вызывать, если вы выбираете базу данных с раскрывающимся списком в окне запроса;затем в окне запроса вызовите сохраненный процесс по его имени и добавьте скобки в конец, чтобы вызвать его как функцию.

Основное различие между текущей версией (я использую 4.26.2 на эту дату) состоит в том, что LINQ в VS возвращает пользовательские типы данных, чтобы соответствовать объектам данных, возвращенным из хранимой процедуры, а LINQPad возвращает DataSet.Таким образом, выбрав «C # Statement (s)», вы можете успешно выполнить этот запрос:

DataSet fooResults = foo_stored_proc(myParam);

Спасибо всем за помощь!

0 голосов
/ 19 июня 2019

Пример: скажем, у меня есть хранимая процедура с именем 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");   

Другие ответы частично верны - я не видел ничего передающего в параметрах (при необходимости).

0 голосов
/ 26 января 2015

Я использую версию 4.51.03 и подключаюсь к SQL Server 2012 Express edition.После подключения к базе данных 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

0 голосов
/ 11 ноября 2010

Вы можете просто сохранить запрос, использующий C #, со стандартными объектами ADO.NET (SqlConnection, SqlCommand и т. Д.) И Dump() результатами.

Я понимаю, что он не использует LINQ, но он хорошо мне послужил.

...