SlideShare una empresa de Scribd logo
1 de 11
Descargar para leer sin conexión
LINQ to SQL (3ª Parte – Consultando la base de datos) 
20 respuestas 
El mes pasado empezé una serie de post sobre LINQ to SQL. LINQ to SQL es un framework O/RM (Object relational mapping) que viene como parte del .NET Framework 3.5, que nos permite modelar de forma sencilla bases de datos relacionales con clases de .NET. Podemos usar, por tanto, expresiones LINQ tanto para consultar a la base de datos como para actualizar/inertar/borrar datos. 
Aquà tenéis los enlaces a los primero dos post de esta serie: 
 Usando LINQ to SQL (1ª Parte) 
 LINQ to SQL (2ª Parte - Definiendo nuestras clases del modelo de datos) 
En el post de hoy vamos a ver en más detalle cómo usar el modelo de datos que creamos en la segunda parte, y veremos cómo usarlo para consultar datos en un proyecto ASP.NET. 
Modelo de la base de datos Northwind con LINQ to SQL 
En el segundo post de la serie vimos cómo crear un modelo de clases LINQ to SQL usando el diseñador de LINQ to SQL que viene con VS 2008. Aquà tenéis el modelo que creamos a partir de la base de datos de ejemplo Northwind: 
Obteniendo productos. 
Una vez que tenemos definido nuestras clases del modelo de datos, podemos consultar y obtener fácilmente datos de nuestra base de datos. LINQ to SQL nos permite esto usando la sintáxis de consultas de LINQ sobre la clase NorthwindDataContext que creamos con el diseñador LINQ to SQL.
Por ejemplo, para obtener e iterar sobre una secuencia de objetos Product podemos escribir el siguiente código: 
En esta consulta hemos usado la sentencia "where" en nuestra consulta LINQ para devolver aquellos productos de una categorÃa. Estamos usando el campo/propiedad CategoryID del producto para hacer el filtro. 
Una de las cosas que nos aporta LINQ to SQL es que nos da una total flexibilidad en cómo consultar nuestros datos, y podemos aprovecharnos de las asociaciones que hicimos cuando modelamos las clases de LINQ to SQL para hacer consultas más naturales y ricas sobre la base de datos. Por ejemplo, podemos modificar el filtro de la consulta por el CategoryName en lugar de por el CategoryID con la siguiente consulta LINQ: 
Fijáos en cómo estamos usando la propiedad "Category" de cada objeto Product para filtrarlos por CategoryName. Esta propiedad fue creada automáticamente por LINQ to SQL ya que modelamos las clases Category y Product con una relación "varios a uno" en la base de datos. 
Por poner otro ejemplo del uso de las relaciones de nuestro modelo, podrÃamos escribir la siguiente consulta LINQ para obtener aquellos productos que tengan más de cinco órdenes para ellos: 
Fijáos cómo usamos la colección "OrderDetails" que LINQ to SQL creó en cada clase Product (debido a la relación 1 a varios que modelamos en el diseñador LINQ to SQL). 
Visualizando consultas LINQ to SQL en el debugger 
Los ORM como LINQ to SQL administran automáticamente la creación y la ejecución del código SQL cuando realizamos consultas o actualizaciones sobre su modelo de objetos. 
Una de los mayores preocupaciones que tienen los desarrolladores sobre los ORMs es "¿pero qué código SQL se está ejecutando?" Una de las cosas que hace LINQ to SQL es poder ver exáctamente qué código SQL se está ejecutando cuando ejecutamos nuestra aplicación con el debugger.
Con la beta 2 de VS 2008 podemos usar el nuevo plug-in de visualización LINQ to SQL para ver (y testear) cualquier consulta LINQ to SQL. Simplemente añadimos un breakpoint y pasamos el ratón por encima y hacemos clic en la lupa para visualizar esa consulta: 
ESto nos mostrará un cuadro de diálogo que nos dirá exactamente la SQL que LINQ to SQL usará cuando se ejecute la consulta para obtener los objetos Product: 
Si pulsamos el botón "Execute" de este diálogo nos permitirá evaluar el SQL dentro del debugger y nos mostrará los resultados de la base de datos: 
Obviamente esto hace realmente fácil ver qué lógica de consultas SQL está realizando LINQ to SQL. Fijáos que podemos sobreescribir la SQL que LINQ to SQL ejecutará si queremos cambiarlo - sin embargo, en el 98% de los casos creo que os dareis cuenta de que el código SQL que LINQ to SQL ejecuta es realmente bueno. 
Enlazando consultas LINQ to SQL a controles ASP.NET
Los resultados de las consultas LINQ implementa la interfaz IEnumerable - la cual es una interfaz que los controles de servidor de ASP.NET soportan para enlazar datos. Lo que implica que podemos enlazar los resultados de cualquier consulta LINQ, LINQ to SQL, o LINQ to XML a cualquier control ASP.NET. 
Por ejemplo, podemos declarar un control <asp:gridview> en una página .aspx de la siguiente forma: 
Luego, podemos enlazar los resultados de la consulta LINQ to SQL que escribimos antes: 
Esto generará una página como la siguiente: 
Restringiendo los resultados de la consulta. 
Hasta ahora, cuando evaluamos una consulta de productos, estamos obteniendo por defecto todas las columnas de datos necesarias para cubrir la entidad de Product. 
Por ejemplo, esta consulta para obtener productos:
El resultado de esta consulta es: 
Normalmente sólo queremos un subconjunto de los datos de cada producto. Podemos usar la nueva caracterÃstica que LINQ y los compiladores de C# y VB tienen para indicar que sólo queremos un subconjunto de los datos, modificando la consulta LINQ to SQL de la siguiente forma: 
Con esto obtendremos un subconjunto de los datos que se obtienen de la base de datos (como vemos con el visor del debugger):
Lo realmente útil de LINQ to SQL es que podemos aprovecharnos de las asociaciones entre clases de nuestro modelo de datos cuando restringimos los datos. Esto nos permite expresar consultas útiles y muy eficientes. Por ejemplo, la siguiente consulta obtiene los ID y los nombres de la entidad Product, el número total de pedidos que hemos hecho de productos, y los suma al total de pedidos de Productos: 
La expresión a la derecha de la propiedad "Revenue" es un ejemplo del uso del método de extensión "Sum" de LINQ. Toma una expresión Lambda que devuelve el valor de cada pedido de producto como argumento. 
LINQ to SQL es listo y es capaz de transformar la expresión LINQ anterior al siguiente SQL cuando es evaluado (con el visor del debugger):
La sentencia SQL anterior hace que los valores NumOrders y Revenue se calculen dentro del servidor SQL, y devuelve los siguientes valores de la base de datos (realmente rápido): 
Podemos enlazar el resultado anterior a nuestro gridview:
BTW - en caso de que os lo preguntéis, tenemos intellisense en VS 2008 cuando escribimos estos tipos de restricciones en las consultas LINQ: 
En este ejemplo estamos declarando un tipo anónimo que usa la inicialización de objetos para amoldar y definir la estructura del resultado. Y seguimos teniendo intellisense en VS 2008, chequeo de compilación y soporte para refactoring con estos tipos anonimos:
Paginando los resultados de la consulta. 
Una de las necesidades más comunes en entornos web es la posibilidad de hacer eficientemente la paginanción en las interfaces de usuario. LINQ tiene dos métodos de extensión que permite hacer esto de forma fácil y eficiente - los métodos Skip() y Take(). 
Podemos usar los métodos Skip() y Take() para indicar que sólo queremos devolver 10 objetos producto - desde la fila que le pasemos como argumento: 
Fijáos que no añadimos ni Skipt() ni Take() en la primera consulta - sino que lo hacemos después de la consulta (cuando lo enlazamos a la fuente de datos del GridView). Muchos me preguntan "¿pero esto no significa que primero obtiene todos los datos de la base de datos y luego hace la paginación (esto es malo)?" No. La cuestión es que LINQ usa un modelo de ejecución en diferido, es decir, la consulta no se ejecuta hasta que se itera sobre los resultados. 
Uno de los beneficios de este modelo de ejecución en diferido es que nos permite crear consultas en varias lÃneas de código (lo que mejora la claridad). También nos permite crear las consultas después de otras - lo que nos permite composiciones más flexibles y reutilización. 
Una vez que tenemos el método BindProduct(), podemos escribir el siguiente código en nuestra página para obtener el Ãndice de inicio de la consulta y hacer que los productos sean paginados y mostrados en el gridview:
Esto nos dará una página de productos, filtrada para mostrar aquellos productos que tengan más de cinco pedidos, mostrando datos calculados dinámicamente, y que son paginables a partir de una cadena de consulta: 
Nota: Cuando trabajamos contra SQL 2005, LINQ to SQL usará la función SQL ROW_NUMBER() para crear toda la lógica de paginación en la base de datos. Esto nos asegura que sólo devolverá las 10 filas de datos que queremos mostrar en la página: 
Esto hace realmente fácil y eficiente navegar por grandes cantidades de datos.
Resumen 
Hemos visto por encima alguna de las cosas que LINQ to SQL nos ofrece. Para aprender más sobre expresiones LINQ y las nuevas caracterÃsticas de consultas que traen los compiladores de C# y VB con VS 2008, leed estos post: 
 Nuevas caracterÃsticas de la nueva versión de C# Orcas 
 Métodos de extensión. 
 Expresiones Lambda 
 Sintaxis de consultas 
 Tipos anónimos 
En el próximo post de esta serie sobre LINQ to SQL veremos cómo podemos añadir lógica de validación a nuestro modelo de clases de datos, y mostraremos cómo podemos usarlo para encapsular la lógica de negocio que se ejecutará con cada actualización, inserción o borrado de nuestros datos. Veremos casos más avanzados, cómo usar el nuevo control <asp:LINQDataSource> para añadir enlaces de datos declarativos a controles ASP.NET, resolución de errores de concurrencia optimista, y más.

Más contenido relacionado

La actualidad más candente

CONEXION A LA BASE DE DATOS SQLITE A TRAVES DE UNA APLICACION MOVIL ANDRO...
CONEXION A  LA BASE DE DATOS  SQLITE A TRAVES DE UNA APLICACION  MOVIL  ANDRO...CONEXION A  LA BASE DE DATOS  SQLITE A TRAVES DE UNA APLICACION  MOVIL  ANDRO...
CONEXION A LA BASE DE DATOS SQLITE A TRAVES DE UNA APLICACION MOVIL ANDRO...Ivan Petrlik
 
Conexión de visual basic a bases de datos. María Parra
Conexión de visual basic a bases de datos. María ParraConexión de visual basic a bases de datos. María Parra
Conexión de visual basic a bases de datos. María ParraMariaphlb
 
la mejor forma de Conectar c# con mysql con archivos de configuracion
 la mejor forma de Conectar c# con mysql con archivos de configuracion  la mejor forma de Conectar c# con mysql con archivos de configuracion
la mejor forma de Conectar c# con mysql con archivos de configuracion juandavid1118
 
Proyecto replicacion con sql server
Proyecto replicacion con sql serverProyecto replicacion con sql server
Proyecto replicacion con sql serveredelveis
 
Replica de SQL Server 2008
Replica de SQL Server 2008Replica de SQL Server 2008
Replica de SQL Server 2008UTA
 
Trabajar con bases de datos desde ASP.NET
Trabajar con bases de datos desde ASP.NETTrabajar con bases de datos desde ASP.NET
Trabajar con bases de datos desde ASP.NETJavier Roig
 
Manual de Duplicacion SQL Server 2008
Manual de Duplicacion SQL Server 2008Manual de Duplicacion SQL Server 2008
Manual de Duplicacion SQL Server 2008Irvin Ponce Pérez
 
Programacion de aplicaciones Web con ASP.NET
Programacion de aplicaciones Web con ASP.NETProgramacion de aplicaciones Web con ASP.NET
Programacion de aplicaciones Web con ASP.NETJavier Roig
 
Tutorial de jpa para windows usando net beans y mysql parte 1
Tutorial de jpa para windows usando net beans y mysql parte 1Tutorial de jpa para windows usando net beans y mysql parte 1
Tutorial de jpa para windows usando net beans y mysql parte 1Henry Mendoza Puerta
 
Entrenamiento en Acceso a Datos con ASP.NET
Entrenamiento en Acceso a Datos con ASP.NETEntrenamiento en Acceso a Datos con ASP.NET
Entrenamiento en Acceso a Datos con ASP.NETHaaron Gonzalez
 
Aprenda a conectar sql y c# en 19 sencillos pasos!
Aprenda a conectar sql y c# en 19 sencillos pasos!Aprenda a conectar sql y c# en 19 sencillos pasos!
Aprenda a conectar sql y c# en 19 sencillos pasos!Ziscko
 
Manual Visual Basic .NET SQL Server paso a paso
Manual Visual Basic .NET SQL Server paso a pasoManual Visual Basic .NET SQL Server paso a paso
Manual Visual Basic .NET SQL Server paso a pasoatak
 
Base de datos desde vs6.0
Base de datos desde vs6.0Base de datos desde vs6.0
Base de datos desde vs6.0CsarDurango
 
Conexión a SQL Server con C#.NET a través de ODBC
Conexión a SQL Server con C#.NET a través de ODBCConexión a SQL Server con C#.NET a través de ODBC
Conexión a SQL Server con C#.NET a través de ODBCOrlando Alemán
 

La actualidad más candente (20)

Dce2 ejercicios asp.net
Dce2 ejercicios asp.netDce2 ejercicios asp.net
Dce2 ejercicios asp.net
 
CONEXION A LA BASE DE DATOS SQLITE A TRAVES DE UNA APLICACION MOVIL ANDRO...
CONEXION A  LA BASE DE DATOS  SQLITE A TRAVES DE UNA APLICACION  MOVIL  ANDRO...CONEXION A  LA BASE DE DATOS  SQLITE A TRAVES DE UNA APLICACION  MOVIL  ANDRO...
CONEXION A LA BASE DE DATOS SQLITE A TRAVES DE UNA APLICACION MOVIL ANDRO...
 
Ejercicio basico en asp.net LOZADA ERICK
Ejercicio basico en asp.net LOZADA ERICKEjercicio basico en asp.net LOZADA ERICK
Ejercicio basico en asp.net LOZADA ERICK
 
Conexión de visual basic a bases de datos. María Parra
Conexión de visual basic a bases de datos. María ParraConexión de visual basic a bases de datos. María Parra
Conexión de visual basic a bases de datos. María Parra
 
la mejor forma de Conectar c# con mysql con archivos de configuracion
 la mejor forma de Conectar c# con mysql con archivos de configuracion  la mejor forma de Conectar c# con mysql con archivos de configuracion
la mejor forma de Conectar c# con mysql con archivos de configuracion
 
Java
JavaJava
Java
 
MANUAL DE REPLICACIÓN SQL SERVER 2008
MANUAL DE REPLICACIÓN SQL SERVER 2008MANUAL DE REPLICACIÓN SQL SERVER 2008
MANUAL DE REPLICACIÓN SQL SERVER 2008
 
Proyecto replicacion con sql server
Proyecto replicacion con sql serverProyecto replicacion con sql server
Proyecto replicacion con sql server
 
REPORTES
REPORTESREPORTES
REPORTES
 
Replica de SQL Server 2008
Replica de SQL Server 2008Replica de SQL Server 2008
Replica de SQL Server 2008
 
manual visual basic 02
manual visual basic 02 manual visual basic 02
manual visual basic 02
 
Trabajar con bases de datos desde ASP.NET
Trabajar con bases de datos desde ASP.NETTrabajar con bases de datos desde ASP.NET
Trabajar con bases de datos desde ASP.NET
 
Manual de Duplicacion SQL Server 2008
Manual de Duplicacion SQL Server 2008Manual de Duplicacion SQL Server 2008
Manual de Duplicacion SQL Server 2008
 
Programacion de aplicaciones Web con ASP.NET
Programacion de aplicaciones Web con ASP.NETProgramacion de aplicaciones Web con ASP.NET
Programacion de aplicaciones Web con ASP.NET
 
Tutorial de jpa para windows usando net beans y mysql parte 1
Tutorial de jpa para windows usando net beans y mysql parte 1Tutorial de jpa para windows usando net beans y mysql parte 1
Tutorial de jpa para windows usando net beans y mysql parte 1
 
Entrenamiento en Acceso a Datos con ASP.NET
Entrenamiento en Acceso a Datos con ASP.NETEntrenamiento en Acceso a Datos con ASP.NET
Entrenamiento en Acceso a Datos con ASP.NET
 
Aprenda a conectar sql y c# en 19 sencillos pasos!
Aprenda a conectar sql y c# en 19 sencillos pasos!Aprenda a conectar sql y c# en 19 sencillos pasos!
Aprenda a conectar sql y c# en 19 sencillos pasos!
 
Manual Visual Basic .NET SQL Server paso a paso
Manual Visual Basic .NET SQL Server paso a pasoManual Visual Basic .NET SQL Server paso a paso
Manual Visual Basic .NET SQL Server paso a paso
 
Base de datos desde vs6.0
Base de datos desde vs6.0Base de datos desde vs6.0
Base de datos desde vs6.0
 
Conexión a SQL Server con C#.NET a través de ODBC
Conexión a SQL Server con C#.NET a través de ODBCConexión a SQL Server con C#.NET a través de ODBC
Conexión a SQL Server con C#.NET a través de ODBC
 

Similar a Consulta BD LINQ to SQL

Ejemplo Linq To SQL
Ejemplo Linq To SQLEjemplo Linq To SQL
Ejemplo Linq To SQLjcfarit
 
Linq to sql 2
Linq to sql 2Linq to sql 2
Linq to sql 2jcfarit
 
API WEB SQL ITParral
API WEB SQL ITParralAPI WEB SQL ITParral
API WEB SQL ITParralFerny Cortez
 
Linq con visual studio 2008
Linq con visual studio 2008Linq con visual studio 2008
Linq con visual studio 2008omicx
 
Introduccion a LINQ
Introduccion a LINQIntroduccion a LINQ
Introduccion a LINQTonymx
 
Introduccion A Linq 1205779028184546 5
Introduccion A Linq 1205779028184546 5Introduccion A Linq 1205779028184546 5
Introduccion A Linq 1205779028184546 5google
 
Bases de Datos Distribuidas con Sql Server 2012
Bases de Datos Distribuidas con Sql Server 2012Bases de Datos Distribuidas con Sql Server 2012
Bases de Datos Distribuidas con Sql Server 2012Antonio Ortiz
 
Técnicas avanzadas de consultas con sql server 2014
Técnicas avanzadas de consultas con sql server 2014Técnicas avanzadas de consultas con sql server 2014
Técnicas avanzadas de consultas con sql server 2014JOSE AHIAS LOPEZ PORTILLO
 
Desarrollo de Apps Web en Ruby on Rails
Desarrollo de Apps Web en Ruby on RailsDesarrollo de Apps Web en Ruby on Rails
Desarrollo de Apps Web en Ruby on RailsFreelancer
 
Espacio de nombres system.data.sql client
Espacio de nombres system.data.sql clientEspacio de nombres system.data.sql client
Espacio de nombres system.data.sql clientLIZBETH LIZANA CARRASCO
 
Presentacion sesion01 - Programacion WEB
Presentacion sesion01 - Programacion WEBPresentacion sesion01 - Programacion WEB
Presentacion sesion01 - Programacion WEBploncan24
 
Silfredo valdez 28391048
Silfredo valdez 28391048Silfredo valdez 28391048
Silfredo valdez 28391048SilfredoValdez
 
[ES] Conectividad de java a base de datos(jdbc)
[ES] Conectividad de java a base  de datos(jdbc)[ES] Conectividad de java a base  de datos(jdbc)
[ES] Conectividad de java a base de datos(jdbc)Eudris Cabrera
 
Tema 15 aplicaciones de dos capas por gio
Tema 15   aplicaciones de dos capas por gioTema 15   aplicaciones de dos capas por gio
Tema 15 aplicaciones de dos capas por gioRobert Wolf
 
Servicios web
Servicios webServicios web
Servicios webitoomac02
 

Similar a Consulta BD LINQ to SQL (20)

Ejemplo Linq To SQL
Ejemplo Linq To SQLEjemplo Linq To SQL
Ejemplo Linq To SQL
 
Linq to sql 2
Linq to sql 2Linq to sql 2
Linq to sql 2
 
API WEB SQL ITParral
API WEB SQL ITParralAPI WEB SQL ITParral
API WEB SQL ITParral
 
Linq con visual studio 2008
Linq con visual studio 2008Linq con visual studio 2008
Linq con visual studio 2008
 
Introduccion a LINQ
Introduccion a LINQIntroduccion a LINQ
Introduccion a LINQ
 
Java con base de datos
Java con base  de datosJava con base  de datos
Java con base de datos
 
Introduccion A Linq 1205779028184546 5
Introduccion A Linq 1205779028184546 5Introduccion A Linq 1205779028184546 5
Introduccion A Linq 1205779028184546 5
 
Bases de Datos Distribuidas con Sql Server 2012
Bases de Datos Distribuidas con Sql Server 2012Bases de Datos Distribuidas con Sql Server 2012
Bases de Datos Distribuidas con Sql Server 2012
 
Técnicas avanzadas de consultas con sql server 2014
Técnicas avanzadas de consultas con sql server 2014Técnicas avanzadas de consultas con sql server 2014
Técnicas avanzadas de consultas con sql server 2014
 
5-Unidad 2: Diseño de Vista-2.2 Para Web
5-Unidad 2: Diseño de Vista-2.2 Para Web5-Unidad 2: Diseño de Vista-2.2 Para Web
5-Unidad 2: Diseño de Vista-2.2 Para Web
 
Mvc
MvcMvc
Mvc
 
Dprn3 u3 a1_rahv
Dprn3 u3 a1_rahvDprn3 u3 a1_rahv
Dprn3 u3 a1_rahv
 
Desarrollo de Apps Web en Ruby on Rails
Desarrollo de Apps Web en Ruby on RailsDesarrollo de Apps Web en Ruby on Rails
Desarrollo de Apps Web en Ruby on Rails
 
Espacio de nombres system.data.sql client
Espacio de nombres system.data.sql clientEspacio de nombres system.data.sql client
Espacio de nombres system.data.sql client
 
Presentacion sesion01 - Programacion WEB
Presentacion sesion01 - Programacion WEBPresentacion sesion01 - Programacion WEB
Presentacion sesion01 - Programacion WEB
 
Bases de datos con java
Bases de datos con javaBases de datos con java
Bases de datos con java
 
Silfredo valdez 28391048
Silfredo valdez 28391048Silfredo valdez 28391048
Silfredo valdez 28391048
 
[ES] Conectividad de java a base de datos(jdbc)
[ES] Conectividad de java a base  de datos(jdbc)[ES] Conectividad de java a base  de datos(jdbc)
[ES] Conectividad de java a base de datos(jdbc)
 
Tema 15 aplicaciones de dos capas por gio
Tema 15   aplicaciones de dos capas por gioTema 15   aplicaciones de dos capas por gio
Tema 15 aplicaciones de dos capas por gio
 
Servicios web
Servicios webServicios web
Servicios web
 

Más de jcfarit

Conceptos basicos de telefonia
Conceptos basicos de telefoniaConceptos basicos de telefonia
Conceptos basicos de telefoniajcfarit
 
Manual de usuario Ruani
Manual de usuario RuaniManual de usuario Ruani
Manual de usuario Ruanijcfarit
 
Unidad 3 gestion de procesos en linux
Unidad 3 gestion de procesos en linuxUnidad 3 gestion de procesos en linux
Unidad 3 gestion de procesos en linuxjcfarit
 
Arquitectura General del Sistema Operativo Linux
Arquitectura General del Sistema Operativo LinuxArquitectura General del Sistema Operativo Linux
Arquitectura General del Sistema Operativo Linuxjcfarit
 
ISO 27001 -6
ISO 27001 -6ISO 27001 -6
ISO 27001 -6jcfarit
 
ISO 27001 - 5
ISO 27001 - 5ISO 27001 - 5
ISO 27001 - 5jcfarit
 
ISO 27001 4
ISO 27001 4ISO 27001 4
ISO 27001 4jcfarit
 
ISO 27001 -3
ISO 27001 -3 ISO 27001 -3
ISO 27001 -3 jcfarit
 
ISO 27001
ISO 27001ISO 27001
ISO 27001jcfarit
 
ISO 27001
ISO 27001ISO 27001
ISO 27001jcfarit
 
Curso ubuntuimprimible
Curso ubuntuimprimibleCurso ubuntuimprimible
Curso ubuntuimprimiblejcfarit
 
Curso ubuntu1extraimprimible
Curso ubuntu1extraimprimibleCurso ubuntu1extraimprimible
Curso ubuntu1extraimprimiblejcfarit
 
Autentificación-Firma Digital
Autentificación-Firma DigitalAutentificación-Firma Digital
Autentificación-Firma Digitaljcfarit
 
Auditoría de Routers y Switches
Auditoría de Routers y SwitchesAuditoría de Routers y Switches
Auditoría de Routers y Switchesjcfarit
 
Arquitectura multi agente.doc
Arquitectura multi agente.docArquitectura multi agente.doc
Arquitectura multi agente.docjcfarit
 
Aplicaciones Criptográficas en Entornos Económicos
Aplicaciones Criptográficas en Entornos EconómicosAplicaciones Criptográficas en Entornos Económicos
Aplicaciones Criptográficas en Entornos Económicosjcfarit
 
Análisis de los sistemas de dinero electrónico
Análisis de los sistemas de dinero electrónicoAnálisis de los sistemas de dinero electrónico
Análisis de los sistemas de dinero electrónicojcfarit
 
Guia plan de_clases
Guia plan de_clasesGuia plan de_clases
Guia plan de_clasesjcfarit
 
Los medios de enseñanza aprendizaje
Los medios de enseñanza aprendizajeLos medios de enseñanza aprendizaje
Los medios de enseñanza aprendizajejcfarit
 

Más de jcfarit (20)

Conceptos basicos de telefonia
Conceptos basicos de telefoniaConceptos basicos de telefonia
Conceptos basicos de telefonia
 
Manual de usuario Ruani
Manual de usuario RuaniManual de usuario Ruani
Manual de usuario Ruani
 
Unidad 3 gestion de procesos en linux
Unidad 3 gestion de procesos en linuxUnidad 3 gestion de procesos en linux
Unidad 3 gestion de procesos en linux
 
Arquitectura General del Sistema Operativo Linux
Arquitectura General del Sistema Operativo LinuxArquitectura General del Sistema Operativo Linux
Arquitectura General del Sistema Operativo Linux
 
ISO 27001 -6
ISO 27001 -6ISO 27001 -6
ISO 27001 -6
 
ISO 27001 - 5
ISO 27001 - 5ISO 27001 - 5
ISO 27001 - 5
 
ISO 27001 4
ISO 27001 4ISO 27001 4
ISO 27001 4
 
ISO 27001 -3
ISO 27001 -3 ISO 27001 -3
ISO 27001 -3
 
ISO 27001
ISO 27001ISO 27001
ISO 27001
 
ISO 27001
ISO 27001ISO 27001
ISO 27001
 
Curso ubuntuimprimible
Curso ubuntuimprimibleCurso ubuntuimprimible
Curso ubuntuimprimible
 
Curso ubuntu1extraimprimible
Curso ubuntu1extraimprimibleCurso ubuntu1extraimprimible
Curso ubuntu1extraimprimible
 
Autentificación-Firma Digital
Autentificación-Firma DigitalAutentificación-Firma Digital
Autentificación-Firma Digital
 
Auditoría de Routers y Switches
Auditoría de Routers y SwitchesAuditoría de Routers y Switches
Auditoría de Routers y Switches
 
Arquitectura multi agente.doc
Arquitectura multi agente.docArquitectura multi agente.doc
Arquitectura multi agente.doc
 
Aplicaciones Criptográficas en Entornos Económicos
Aplicaciones Criptográficas en Entornos EconómicosAplicaciones Criptográficas en Entornos Económicos
Aplicaciones Criptográficas en Entornos Económicos
 
Análisis de los sistemas de dinero electrónico
Análisis de los sistemas de dinero electrónicoAnálisis de los sistemas de dinero electrónico
Análisis de los sistemas de dinero electrónico
 
Suneval
SunevalSuneval
Suneval
 
Guia plan de_clases
Guia plan de_clasesGuia plan de_clases
Guia plan de_clases
 
Los medios de enseñanza aprendizaje
Los medios de enseñanza aprendizajeLos medios de enseñanza aprendizaje
Los medios de enseñanza aprendizaje
 

Último

institucion educativa la esperanza sede magdalena
institucion educativa la esperanza sede magdalenainstitucion educativa la esperanza sede magdalena
institucion educativa la esperanza sede magdalenajuniorcuellargomez
 
12 Clasificacion de las Computadoras.pdf
12 Clasificacion de las Computadoras.pdf12 Clasificacion de las Computadoras.pdf
12 Clasificacion de las Computadoras.pdfedwinmelgarschlink2
 
COMPETENCIAS CIUDADANASadadadadadadada .pdf
COMPETENCIAS CIUDADANASadadadadadadada .pdfCOMPETENCIAS CIUDADANASadadadadadadada .pdf
COMPETENCIAS CIUDADANASadadadadadadada .pdfOscarBlas6
 
INSTITUCION EDUCATIVA LA ESPERANZA SEDE MAGDALENA
INSTITUCION EDUCATIVA LA ESPERANZA SEDE MAGDALENAINSTITUCION EDUCATIVA LA ESPERANZA SEDE MAGDALENA
INSTITUCION EDUCATIVA LA ESPERANZA SEDE MAGDALENAdanielaerazok
 
NUVO PROGRAMAS DE ESCUELAS NUEVO-ACUERDO-CTE.pdf
NUVO PROGRAMAS DE ESCUELAS NUEVO-ACUERDO-CTE.pdfNUVO PROGRAMAS DE ESCUELAS NUEVO-ACUERDO-CTE.pdf
NUVO PROGRAMAS DE ESCUELAS NUEVO-ACUERDO-CTE.pdfisrael garcia
 
Institucion educativa la esperanza sede la magdalena
Institucion educativa la esperanza sede la magdalenaInstitucion educativa la esperanza sede la magdalena
Institucion educativa la esperanza sede la magdalenadanielaerazok
 
Guia para el registro en el sitio slideshare.pdf
Guia para el registro en el sitio slideshare.pdfGuia para el registro en el sitio slideshare.pdf
Guia para el registro en el sitio slideshare.pdflauradbernals
 
COMOGANARAMIGODPARACRISTOIGLESIAADVENTISTANECOCLI,COM
COMOGANARAMIGODPARACRISTOIGLESIAADVENTISTANECOCLI,COMCOMOGANARAMIGODPARACRISTOIGLESIAADVENTISTANECOCLI,COM
COMOGANARAMIGODPARACRISTOIGLESIAADVENTISTANECOCLI,COMcespitiacardales
 
Buscadores, SEM SEO: el desafío de ser visto en la web
Buscadores, SEM SEO: el desafío de ser visto en la webBuscadores, SEM SEO: el desafío de ser visto en la web
Buscadores, SEM SEO: el desafío de ser visto en la webDecaunlz
 
libro de Ciencias Sociales_6to grado.pdf
libro de Ciencias Sociales_6to grado.pdflibro de Ciencias Sociales_6to grado.pdf
libro de Ciencias Sociales_6to grado.pdfFAUSTODANILOCRUZCAST
 

Último (10)

institucion educativa la esperanza sede magdalena
institucion educativa la esperanza sede magdalenainstitucion educativa la esperanza sede magdalena
institucion educativa la esperanza sede magdalena
 
12 Clasificacion de las Computadoras.pdf
12 Clasificacion de las Computadoras.pdf12 Clasificacion de las Computadoras.pdf
12 Clasificacion de las Computadoras.pdf
 
COMPETENCIAS CIUDADANASadadadadadadada .pdf
COMPETENCIAS CIUDADANASadadadadadadada .pdfCOMPETENCIAS CIUDADANASadadadadadadada .pdf
COMPETENCIAS CIUDADANASadadadadadadada .pdf
 
INSTITUCION EDUCATIVA LA ESPERANZA SEDE MAGDALENA
INSTITUCION EDUCATIVA LA ESPERANZA SEDE MAGDALENAINSTITUCION EDUCATIVA LA ESPERANZA SEDE MAGDALENA
INSTITUCION EDUCATIVA LA ESPERANZA SEDE MAGDALENA
 
NUVO PROGRAMAS DE ESCUELAS NUEVO-ACUERDO-CTE.pdf
NUVO PROGRAMAS DE ESCUELAS NUEVO-ACUERDO-CTE.pdfNUVO PROGRAMAS DE ESCUELAS NUEVO-ACUERDO-CTE.pdf
NUVO PROGRAMAS DE ESCUELAS NUEVO-ACUERDO-CTE.pdf
 
Institucion educativa la esperanza sede la magdalena
Institucion educativa la esperanza sede la magdalenaInstitucion educativa la esperanza sede la magdalena
Institucion educativa la esperanza sede la magdalena
 
Guia para el registro en el sitio slideshare.pdf
Guia para el registro en el sitio slideshare.pdfGuia para el registro en el sitio slideshare.pdf
Guia para el registro en el sitio slideshare.pdf
 
COMOGANARAMIGODPARACRISTOIGLESIAADVENTISTANECOCLI,COM
COMOGANARAMIGODPARACRISTOIGLESIAADVENTISTANECOCLI,COMCOMOGANARAMIGODPARACRISTOIGLESIAADVENTISTANECOCLI,COM
COMOGANARAMIGODPARACRISTOIGLESIAADVENTISTANECOCLI,COM
 
Buscadores, SEM SEO: el desafío de ser visto en la web
Buscadores, SEM SEO: el desafío de ser visto en la webBuscadores, SEM SEO: el desafío de ser visto en la web
Buscadores, SEM SEO: el desafío de ser visto en la web
 
libro de Ciencias Sociales_6to grado.pdf
libro de Ciencias Sociales_6to grado.pdflibro de Ciencias Sociales_6to grado.pdf
libro de Ciencias Sociales_6to grado.pdf
 

Consulta BD LINQ to SQL

  • 1. LINQ to SQL (3ª Parte – Consultando la base de datos) 20 respuestas El mes pasado empezé una serie de post sobre LINQ to SQL. LINQ to SQL es un framework O/RM (Object relational mapping) que viene como parte del .NET Framework 3.5, que nos permite modelar de forma sencilla bases de datos relacionales con clases de .NET. Podemos usar, por tanto, expresiones LINQ tanto para consultar a la base de datos como para actualizar/inertar/borrar datos. Aquà tenéis los enlaces a los primero dos post de esta serie:  Usando LINQ to SQL (1ª Parte)  LINQ to SQL (2ª Parte - Definiendo nuestras clases del modelo de datos) En el post de hoy vamos a ver en más detalle cómo usar el modelo de datos que creamos en la segunda parte, y veremos cómo usarlo para consultar datos en un proyecto ASP.NET. Modelo de la base de datos Northwind con LINQ to SQL En el segundo post de la serie vimos cómo crear un modelo de clases LINQ to SQL usando el diseñador de LINQ to SQL que viene con VS 2008. Aquà tenéis el modelo que creamos a partir de la base de datos de ejemplo Northwind: Obteniendo productos. Una vez que tenemos definido nuestras clases del modelo de datos, podemos consultar y obtener fácilmente datos de nuestra base de datos. LINQ to SQL nos permite esto usando la sintáxis de consultas de LINQ sobre la clase NorthwindDataContext que creamos con el diseñador LINQ to SQL.
  • 2. Por ejemplo, para obtener e iterar sobre una secuencia de objetos Product podemos escribir el siguiente código: En esta consulta hemos usado la sentencia "where" en nuestra consulta LINQ para devolver aquellos productos de una categorÃa. Estamos usando el campo/propiedad CategoryID del producto para hacer el filtro. Una de las cosas que nos aporta LINQ to SQL es que nos da una total flexibilidad en cómo consultar nuestros datos, y podemos aprovecharnos de las asociaciones que hicimos cuando modelamos las clases de LINQ to SQL para hacer consultas más naturales y ricas sobre la base de datos. Por ejemplo, podemos modificar el filtro de la consulta por el CategoryName en lugar de por el CategoryID con la siguiente consulta LINQ: Fijáos en cómo estamos usando la propiedad "Category" de cada objeto Product para filtrarlos por CategoryName. Esta propiedad fue creada automáticamente por LINQ to SQL ya que modelamos las clases Category y Product con una relación "varios a uno" en la base de datos. Por poner otro ejemplo del uso de las relaciones de nuestro modelo, podrÃamos escribir la siguiente consulta LINQ para obtener aquellos productos que tengan más de cinco órdenes para ellos: Fijáos cómo usamos la colección "OrderDetails" que LINQ to SQL creó en cada clase Product (debido a la relación 1 a varios que modelamos en el diseñador LINQ to SQL). Visualizando consultas LINQ to SQL en el debugger Los ORM como LINQ to SQL administran automáticamente la creación y la ejecución del código SQL cuando realizamos consultas o actualizaciones sobre su modelo de objetos. Una de los mayores preocupaciones que tienen los desarrolladores sobre los ORMs es "¿pero qué código SQL se está ejecutando?" Una de las cosas que hace LINQ to SQL es poder ver exáctamente qué código SQL se está ejecutando cuando ejecutamos nuestra aplicación con el debugger.
  • 3. Con la beta 2 de VS 2008 podemos usar el nuevo plug-in de visualización LINQ to SQL para ver (y testear) cualquier consulta LINQ to SQL. Simplemente añadimos un breakpoint y pasamos el ratón por encima y hacemos clic en la lupa para visualizar esa consulta: ESto nos mostrará un cuadro de diálogo que nos dirá exactamente la SQL que LINQ to SQL usará cuando se ejecute la consulta para obtener los objetos Product: Si pulsamos el botón "Execute" de este diálogo nos permitirá evaluar el SQL dentro del debugger y nos mostrará los resultados de la base de datos: Obviamente esto hace realmente fácil ver qué lógica de consultas SQL está realizando LINQ to SQL. Fijáos que podemos sobreescribir la SQL que LINQ to SQL ejecutará si queremos cambiarlo - sin embargo, en el 98% de los casos creo que os dareis cuenta de que el código SQL que LINQ to SQL ejecuta es realmente bueno. Enlazando consultas LINQ to SQL a controles ASP.NET
  • 4. Los resultados de las consultas LINQ implementa la interfaz IEnumerable - la cual es una interfaz que los controles de servidor de ASP.NET soportan para enlazar datos. Lo que implica que podemos enlazar los resultados de cualquier consulta LINQ, LINQ to SQL, o LINQ to XML a cualquier control ASP.NET. Por ejemplo, podemos declarar un control <asp:gridview> en una página .aspx de la siguiente forma: Luego, podemos enlazar los resultados de la consulta LINQ to SQL que escribimos antes: Esto generará una página como la siguiente: Restringiendo los resultados de la consulta. Hasta ahora, cuando evaluamos una consulta de productos, estamos obteniendo por defecto todas las columnas de datos necesarias para cubrir la entidad de Product. Por ejemplo, esta consulta para obtener productos:
  • 5. El resultado de esta consulta es: Normalmente sólo queremos un subconjunto de los datos de cada producto. Podemos usar la nueva caracterÃstica que LINQ y los compiladores de C# y VB tienen para indicar que sólo queremos un subconjunto de los datos, modificando la consulta LINQ to SQL de la siguiente forma: Con esto obtendremos un subconjunto de los datos que se obtienen de la base de datos (como vemos con el visor del debugger):
  • 6. Lo realmente útil de LINQ to SQL es que podemos aprovecharnos de las asociaciones entre clases de nuestro modelo de datos cuando restringimos los datos. Esto nos permite expresar consultas útiles y muy eficientes. Por ejemplo, la siguiente consulta obtiene los ID y los nombres de la entidad Product, el número total de pedidos que hemos hecho de productos, y los suma al total de pedidos de Productos: La expresión a la derecha de la propiedad "Revenue" es un ejemplo del uso del método de extensión "Sum" de LINQ. Toma una expresión Lambda que devuelve el valor de cada pedido de producto como argumento. LINQ to SQL es listo y es capaz de transformar la expresión LINQ anterior al siguiente SQL cuando es evaluado (con el visor del debugger):
  • 7. La sentencia SQL anterior hace que los valores NumOrders y Revenue se calculen dentro del servidor SQL, y devuelve los siguientes valores de la base de datos (realmente rápido): Podemos enlazar el resultado anterior a nuestro gridview:
  • 8. BTW - en caso de que os lo preguntéis, tenemos intellisense en VS 2008 cuando escribimos estos tipos de restricciones en las consultas LINQ: En este ejemplo estamos declarando un tipo anónimo que usa la inicialización de objetos para amoldar y definir la estructura del resultado. Y seguimos teniendo intellisense en VS 2008, chequeo de compilación y soporte para refactoring con estos tipos anonimos:
  • 9. Paginando los resultados de la consulta. Una de las necesidades más comunes en entornos web es la posibilidad de hacer eficientemente la paginanción en las interfaces de usuario. LINQ tiene dos métodos de extensión que permite hacer esto de forma fácil y eficiente - los métodos Skip() y Take(). Podemos usar los métodos Skip() y Take() para indicar que sólo queremos devolver 10 objetos producto - desde la fila que le pasemos como argumento: Fijáos que no añadimos ni Skipt() ni Take() en la primera consulta - sino que lo hacemos después de la consulta (cuando lo enlazamos a la fuente de datos del GridView). Muchos me preguntan "¿pero esto no significa que primero obtiene todos los datos de la base de datos y luego hace la paginación (esto es malo)?" No. La cuestión es que LINQ usa un modelo de ejecución en diferido, es decir, la consulta no se ejecuta hasta que se itera sobre los resultados. Uno de los beneficios de este modelo de ejecución en diferido es que nos permite crear consultas en varias lÃneas de código (lo que mejora la claridad). También nos permite crear las consultas después de otras - lo que nos permite composiciones más flexibles y reutilización. Una vez que tenemos el método BindProduct(), podemos escribir el siguiente código en nuestra página para obtener el Ãndice de inicio de la consulta y hacer que los productos sean paginados y mostrados en el gridview:
  • 10. Esto nos dará una página de productos, filtrada para mostrar aquellos productos que tengan más de cinco pedidos, mostrando datos calculados dinámicamente, y que son paginables a partir de una cadena de consulta: Nota: Cuando trabajamos contra SQL 2005, LINQ to SQL usará la función SQL ROW_NUMBER() para crear toda la lógica de paginación en la base de datos. Esto nos asegura que sólo devolverá las 10 filas de datos que queremos mostrar en la página: Esto hace realmente fácil y eficiente navegar por grandes cantidades de datos.
  • 11. Resumen Hemos visto por encima alguna de las cosas que LINQ to SQL nos ofrece. Para aprender más sobre expresiones LINQ y las nuevas caracterÃsticas de consultas que traen los compiladores de C# y VB con VS 2008, leed estos post:  Nuevas caracterÃsticas de la nueva versión de C# Orcas  Métodos de extensión.  Expresiones Lambda  Sintaxis de consultas  Tipos anónimos En el próximo post de esta serie sobre LINQ to SQL veremos cómo podemos añadir lógica de validación a nuestro modelo de clases de datos, y mostraremos cómo podemos usarlo para encapsular la lógica de negocio que se ejecutará con cada actualización, inserción o borrado de nuestros datos. Veremos casos más avanzados, cómo usar el nuevo control <asp:LINQDataSource> para añadir enlaces de datos declarativos a controles ASP.NET, resolución de errores de concurrencia optimista, y más.