Como recuperar datos con LINQ desde un Procedimiento Almacenado Septiembre 9, 2008
Posted by elmercarias in .Net, LINQ.Tags: .Net, linq
trackback
Hace un par de días un amigo me consulto sobre como obtener el resultado de un Procedimiento Almacenado que devuelve varios registros de datos y que esta compuesto por campos de varias tablas.
La solucion que se me ocurrió en su momento fue Crear una Entidad en el Diseñador de LINQ to SQL y despues hacer que el Procedimiento almacenado devilviera ese tipo de entidad.
Pero despues de probar bien, me di cuenta de que no es necesario crear una Entidad Nueva, ya que el diseñador lo hace automaticamente. Para el ejemplo utilizaremos la base de datos Northwind.
Nota: El Procedimiento Almacenado que utilizaremos se llama [Ten Most Expensive Products] : el cual devuelve los 10 Productos con Mayor Precio
Pasos a seguir:
1) Creamos un Proyecto Web Visual Basic (para el ejemplo lo haremos de esta forma, aunque puede ser Windows)
2) Adicionamos un ASP Net Folder, especificamente la de App_Code. Esta carpeta es importante porque es donde crearemos el objeto LINQ to SQL.
3) Adicionamos a la carpeta creada en el paso anterior un nuevo Item y elegimos “LINQ to SQL Classes”, le colocamos el nombre NorthwindDataClasses.dbml
4) Buscamos en Server Explorer la conexión a la base de datos y buscamos la sección de Stored Procedures de la conexión elegida. Buscamos el Procedimiento [Ten Most Expensive Products] y lo arrastramos y soltamos sobre el Panel de Métodos del Diseñador. Guardamos el objeto.


Si vemos las propiedades observamos que el tipo retornado dice que es Autogenerado.
5) Abrir el archivo NorthwindDataClasses.designer.vb elegimos en el editor la clase NorthwindDataClassesDataContext y despues elegimos el método Ten_Most_Expensive_Products. El codigo que veremos será el siguiente:
6) Agregar un GridView a la página donde se quiere agregar la consulta (en el caso del ejemplo lo haremos en Default.aspx)
7) Abrimos el codigo y agregamos lo siguiente:
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
Dim resultado = From productos In db.Ten_Most_Expensive_Products _
Select productos
Me.GridView1.DataBind()
End Sub

Espero este ejemplo les ayude a entender como se utilizan los Procedimientos almacenados desde LINQ.
Bajate el código fuente del ejemplo aqui.
“El fracaso tiene mil excusas, el éxito no requiere explicación”

Comentarios»
No comments yet — be the first.