SlideShare una empresa de Scribd logo
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

Dce2 ejercicios asp.net
Dce2 ejercicios asp.netDce2 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...
Ivan Petrlik
 
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
Erick Paul Lozada Peñarreta
 
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
Mariaphlb
 
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
 
Java
JavaJava
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
Jesus Alberto Casco Agudelo
 
Proyecto replicacion con sql server
Proyecto replicacion con sql serverProyecto replicacion con sql server
Proyecto replicacion con sql server
edelveis
 
REPORTES
REPORTESREPORTES
Replica de SQL Server 2008
Replica de SQL Server 2008Replica de SQL Server 2008
Replica de SQL Server 2008
UTA
 
manual visual basic 02
manual visual basic 02 manual visual basic 02
manual visual basic 02
Jhhoonnha Jimeru
 
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
Javier Roig
 
Manual de Duplicacion SQL Server 2008
Manual de Duplicacion SQL Server 2008Manual de Duplicacion SQL Server 2008
Manual de Duplicacion SQL Server 2008
Irvin 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.NET
Javier 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 1
Henry 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.NET
Haaron 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 paso
atak
 
Base de datos desde vs6.0
Base de datos desde vs6.0Base de datos desde vs6.0
Base de datos desde vs6.0
CsarDurango
 
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
Orlando 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 Linq to sql 3

Ejemplo Linq To SQL
Ejemplo Linq To SQLEjemplo Linq To SQL
Ejemplo Linq To SQL
jcfarit
 
Linq to sql 2
Linq to sql 2Linq to sql 2
Linq to sql 2
jcfarit
 
API WEB SQL ITParral
API WEB SQL ITParralAPI WEB SQL ITParral
API WEB SQL ITParral
Ferny Cortez
 
Linq con visual studio 2008
Linq con visual studio 2008Linq con visual studio 2008
Linq con visual studio 2008
omicx
 
Introduccion a LINQ
Introduccion a LINQIntroduccion a LINQ
Introduccion a LINQ
Tonymx
 
Java con base de datos
Java con base  de datosJava con base  de datos
Java con base de datos
jhersi saavedra garcia
 
Introduccion A Linq 1205779028184546 5
Introduccion A Linq 1205779028184546 5Introduccion A Linq 1205779028184546 5
Introduccion A Linq 1205779028184546 5
google
 
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
Antonio 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 2014
JOSE AHIAS LOPEZ PORTILLO
 
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
Luis Fernando Aguas Bucheli
 
Mvc
MvcMvc
Dprn3 u3 a1_rahv
Dprn3 u3 a1_rahvDprn3 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
Freelancer
 
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
LIZBETH LIZANA CARRASCO
 
Presentacion sesion01 - Programacion WEB
Presentacion sesion01 - Programacion WEBPresentacion sesion01 - Programacion WEB
Presentacion sesion01 - Programacion WEB
ploncan24
 
Bases de datos con java
Bases de datos con javaBases de datos con java
Bases de datos con java
Francisco Jose Caneda Iglesias
 
Silfredo valdez 28391048
Silfredo valdez 28391048Silfredo valdez 28391048
Silfredo valdez 28391048
SilfredoValdez
 
[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 gio
Robert Wolf
 
Servicios web
Servicios webServicios web
Servicios web
itoomac02
 

Similar a Linq to sql 3 (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 telefonia
jcfarit
 
Manual de usuario Ruani
Manual de usuario RuaniManual de usuario Ruani
Manual de usuario Ruani
jcfarit
 
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
jcfarit
 
Arquitectura General del Sistema Operativo Linux
Arquitectura General del Sistema Operativo LinuxArquitectura General del Sistema Operativo Linux
Arquitectura General del Sistema Operativo Linux
jcfarit
 
ISO 27001 -6
ISO 27001 -6ISO 27001 -6
ISO 27001 -6
jcfarit
 
ISO 27001 - 5
ISO 27001 - 5ISO 27001 - 5
ISO 27001 - 5
jcfarit
 
ISO 27001 4
ISO 27001 4ISO 27001 4
ISO 27001 4
jcfarit
 
ISO 27001 -3
ISO 27001 -3 ISO 27001 -3
ISO 27001 -3
jcfarit
 
ISO 27001
ISO 27001ISO 27001
ISO 27001
jcfarit
 
ISO 27001
ISO 27001ISO 27001
ISO 27001
jcfarit
 
Curso ubuntuimprimible
Curso ubuntuimprimibleCurso ubuntuimprimible
Curso ubuntuimprimible
jcfarit
 
Curso ubuntu1extraimprimible
Curso ubuntu1extraimprimibleCurso ubuntu1extraimprimible
Curso ubuntu1extraimprimible
jcfarit
 
Autentificación-Firma Digital
Autentificación-Firma DigitalAutentificación-Firma Digital
Autentificación-Firma Digital
jcfarit
 
Auditoría de Routers y Switches
Auditoría de Routers y SwitchesAuditoría de Routers y Switches
Auditoría de Routers y Switches
jcfarit
 
Arquitectura multi agente.doc
Arquitectura multi agente.docArquitectura multi agente.doc
Arquitectura multi agente.doc
jcfarit
 
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
jcfarit
 
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
jcfarit
 
Suneval
SunevalSuneval
Suneval
jcfarit
 
Guia plan de_clases
Guia plan de_clasesGuia plan de_clases
Guia plan de_clases
jcfarit
 
Los medios de enseñanza aprendizaje
Los medios de enseñanza aprendizajeLos medios de enseñanza aprendizaje
Los medios de enseñanza aprendizaje
jcfarit
 

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

APLICACIONES DE INTERNET-INFORMATICA.pptx
APLICACIONES DE INTERNET-INFORMATICA.pptxAPLICACIONES DE INTERNET-INFORMATICA.pptx
APLICACIONES DE INTERNET-INFORMATICA.pptx
cpadua713
 
5 CRITERIOS PARA EL DISEÑO DE DIAGRAMAS DE FLUJO.pptx
5 CRITERIOS PARA EL DISEÑO DE DIAGRAMAS DE FLUJO.pptx5 CRITERIOS PARA EL DISEÑO DE DIAGRAMAS DE FLUJO.pptx
5 CRITERIOS PARA EL DISEÑO DE DIAGRAMAS DE FLUJO.pptx
AlexanderCR12
 
SEGURIDAD INFORMATICA- Ariana Vicente Cruzatt
SEGURIDAD INFORMATICA- Ariana Vicente CruzattSEGURIDAD INFORMATICA- Ariana Vicente Cruzatt
SEGURIDAD INFORMATICA- Ariana Vicente Cruzatt
vicenteariana54
 
ESTUDIANTES BENEFICIARIOS que se suman a los beneficios de la universidad
ESTUDIANTES BENEFICIARIOS que se suman a los beneficios de la universidadESTUDIANTES BENEFICIARIOS que se suman a los beneficios de la universidad
ESTUDIANTES BENEFICIARIOS que se suman a los beneficios de la universidad
jorgejhonatanaltamir1
 
FICHA DE EDUCACIÓN RELIGIOSA 17 DE CTUBRE LA oracion.docx
FICHA DE EDUCACIÓN RELIGIOSA  17 DE CTUBRE LA  oracion.docxFICHA DE EDUCACIÓN RELIGIOSA  17 DE CTUBRE LA  oracion.docx
FICHA DE EDUCACIÓN RELIGIOSA 17 DE CTUBRE LA oracion.docx
EmilyEsmeraldaQuispe
 
La revolución de Netflix redefiniendo las películas, la televisión, el arte y...
La revolución de Netflix redefiniendo las películas, la televisión, el arte y...La revolución de Netflix redefiniendo las películas, la televisión, el arte y...
La revolución de Netflix redefiniendo las películas, la televisión, el arte y...
NoraRoberts5
 
Clases de Informática primaria para niños de colegios católicos
Clases de Informática primaria para niños de colegios católicosClases de Informática primaria para niños de colegios católicos
Clases de Informática primaria para niños de colegios católicos
mcavero2019
 
Oración a Pomba Gira María Padilha .docx
Oración a Pomba Gira María Padilha .docxOración a Pomba Gira María Padilha .docx
Oración a Pomba Gira María Padilha .docx
LuisAlbertoCordovaBa
 
Diapositiva Herramientas Web, Tema Web 3.0.pptx
Diapositiva Herramientas Web, Tema Web 3.0.pptxDiapositiva Herramientas Web, Tema Web 3.0.pptx
Diapositiva Herramientas Web, Tema Web 3.0.pptx
erick502105
 
SLIDESHARE, qué es, ventajas y desventajas
SLIDESHARE, qué es, ventajas y desventajasSLIDESHARE, qué es, ventajas y desventajas
SLIDESHARE, qué es, ventajas y desventajas
ruthechepurizaca
 
COMUNIDADES DE APRENDIZAJE EN EL CURSO DE APLICACIONES PARA INTERNET
COMUNIDADES DE APRENDIZAJE EN EL CURSO DE APLICACIONES PARA INTERNETCOMUNIDADES DE APRENDIZAJE EN EL CURSO DE APLICACIONES PARA INTERNET
COMUNIDADES DE APRENDIZAJE EN EL CURSO DE APLICACIONES PARA INTERNET
Kevin Aguilar Garcia
 

Último (11)

APLICACIONES DE INTERNET-INFORMATICA.pptx
APLICACIONES DE INTERNET-INFORMATICA.pptxAPLICACIONES DE INTERNET-INFORMATICA.pptx
APLICACIONES DE INTERNET-INFORMATICA.pptx
 
5 CRITERIOS PARA EL DISEÑO DE DIAGRAMAS DE FLUJO.pptx
5 CRITERIOS PARA EL DISEÑO DE DIAGRAMAS DE FLUJO.pptx5 CRITERIOS PARA EL DISEÑO DE DIAGRAMAS DE FLUJO.pptx
5 CRITERIOS PARA EL DISEÑO DE DIAGRAMAS DE FLUJO.pptx
 
SEGURIDAD INFORMATICA- Ariana Vicente Cruzatt
SEGURIDAD INFORMATICA- Ariana Vicente CruzattSEGURIDAD INFORMATICA- Ariana Vicente Cruzatt
SEGURIDAD INFORMATICA- Ariana Vicente Cruzatt
 
ESTUDIANTES BENEFICIARIOS que se suman a los beneficios de la universidad
ESTUDIANTES BENEFICIARIOS que se suman a los beneficios de la universidadESTUDIANTES BENEFICIARIOS que se suman a los beneficios de la universidad
ESTUDIANTES BENEFICIARIOS que se suman a los beneficios de la universidad
 
FICHA DE EDUCACIÓN RELIGIOSA 17 DE CTUBRE LA oracion.docx
FICHA DE EDUCACIÓN RELIGIOSA  17 DE CTUBRE LA  oracion.docxFICHA DE EDUCACIÓN RELIGIOSA  17 DE CTUBRE LA  oracion.docx
FICHA DE EDUCACIÓN RELIGIOSA 17 DE CTUBRE LA oracion.docx
 
La revolución de Netflix redefiniendo las películas, la televisión, el arte y...
La revolución de Netflix redefiniendo las películas, la televisión, el arte y...La revolución de Netflix redefiniendo las películas, la televisión, el arte y...
La revolución de Netflix redefiniendo las películas, la televisión, el arte y...
 
Clases de Informática primaria para niños de colegios católicos
Clases de Informática primaria para niños de colegios católicosClases de Informática primaria para niños de colegios católicos
Clases de Informática primaria para niños de colegios católicos
 
Oración a Pomba Gira María Padilha .docx
Oración a Pomba Gira María Padilha .docxOración a Pomba Gira María Padilha .docx
Oración a Pomba Gira María Padilha .docx
 
Diapositiva Herramientas Web, Tema Web 3.0.pptx
Diapositiva Herramientas Web, Tema Web 3.0.pptxDiapositiva Herramientas Web, Tema Web 3.0.pptx
Diapositiva Herramientas Web, Tema Web 3.0.pptx
 
SLIDESHARE, qué es, ventajas y desventajas
SLIDESHARE, qué es, ventajas y desventajasSLIDESHARE, qué es, ventajas y desventajas
SLIDESHARE, qué es, ventajas y desventajas
 
COMUNIDADES DE APRENDIZAJE EN EL CURSO DE APLICACIONES PARA INTERNET
COMUNIDADES DE APRENDIZAJE EN EL CURSO DE APLICACIONES PARA INTERNETCOMUNIDADES DE APRENDIZAJE EN EL CURSO DE APLICACIONES PARA INTERNET
COMUNIDADES DE APRENDIZAJE EN EL CURSO DE APLICACIONES PARA INTERNET
 

Linq to sql 3

  • 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.