c# - net - ¿Es posible llamar a un procedimiento almacenado utilizando LINQ en LINQPad?
llamar un sp en c# (5)
En Visual Studio tienes el diseñador agradable que encapsula un proceso almacenado con un pequeño método ingenioso. Me encanta LINQPad y lo uso a diario en el trabajo (¡no he tenido la necesidad de abrir SQL Studio para mi trabajo desde que lo uso!) Y me gustaría llamar a los procedimientos almacenados mientras lo uso.
Me temo que sé la respuesta a mi propia pregunta, pero espero que tal vez haya una característica que me falta o que alguien tenga algo de magia negra que me puedan prestar para que esto suceda. Por cierto, estoy usando LINQPad 4 si eso hace una diferencia.
Editar
Vea mi respuesta a continuación.
Al menos en mi copia de LINQPad, los procedimientos almacenados se muestran en la vista de árbol de la base de datos y se pueden invocar directamente.
Aquí hay una captura de pantalla:
Estoy usando la versión 4.51.03 y conectándome a la edición SQL Server 2012 Express. Después de conectarme a la base de datos AdventureWorks2012 puedo ver todos los procedimientos almacenados. Al hacer clic con el botón derecho en un procedimiento almacenado y elegir el menú desplegable StoredProceedureName (...) , se muestra el procedimiento almacenado en la ventana de consulta. Debe insertar los parámetros dentro del paréntesis que contiene los puntos suspensivos y ejecutar la consulta.
Los ejemplos se muestran en las siguientes dos publicaciones:
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
Resumiendo algunas de las otras respuestas y agregando un poco de información adicional:
Conéctese a su fuente de datos utilizando el controlador Predeterminado (LINQ to SQL) . Asegúrese de que la casilla de verificación Incluir procedimientos y funciones almacenados esté marcada.
Los procedimientos y funciones almacenados ahora están disponibles como funciones .NET (por ejemplo, C #) en las consultas que utilizan la conexión. Los parámetros requeridos por la función reflejan los parámetros requeridos por el procedimiento almacenado o la función de base de datos.
El valor devuelto por la función es un ReturnDataSet
que es un tipo ReturnDataSet
que se deriva de DataSet
. Desafortunadamente, no es tan fácil realizar consultas LINQ en conjuntos de datos, pero LINQPad proporciona el método de extensión AsDynamic()
que tomará la primera tabla del conjunto de datos devuelto (normalmente solo hay una tabla) y convertirá las filas en IEnumerable<Object>
donde los objetos de la colección son dinámicos, lo que le permite acceder a los valores de columna como propiedades. Por ejemplo, si su procedimiento almacenado devuelve las columnas Id
y Name
, puede usar LINQ:
SomeStoredProc().AsDynamic().Where(row => row.Id == 123 && row.Name == "Foo")
Desafortunadamente no tendrá inteligencia porque los objetos de la fila son dinámicos.
Simplemente puede guardar una consulta que use C # con objetos estándar ADO.NET ( SqlConnection
, SqlCommand
, etc.) y Dump()
los resultados.
Me doy cuenta de que no está usando LINQ, pero me ha servido bien.
Mi respuesta (con la ayuda de Daniel, gracias.)
Daniel me ayudó a darme cuenta de que se pueden llamar procedimientos almacenados si se dirige a una base de datos con la lista desplegable en la ventana de consulta; luego, en la ventana de consulta, llame al proceso almacenado por su nombre y agregue paréntesis al final para llamarlo como una función.
La principal diferencia entre la versión actual (estoy usando 4.26.2 a partir de esta fecha) es que LINQ en VS devuelve tipos de datos personalizados para que coincidan con los objetos de datos devueltos por el procedimiento almacenado y LINQPad devuelve un DataSet. Por lo tanto, al seleccionar "Declaración (s) de C #", puede ejecutar esto como una consulta:
DataSet fooResults = foo_stored_proc(myParam);
Gracias por la ayuda de todos!