1. Instituto Tecnológico Superior de Tepeaca
P R E S E N T A
I S C O M A R F L O R E S M A R T Í N E Z
P r i m e r C o n g r e s o d e T e c n o l o g í a s d e l a
I n f o r m a c i ó n d e l a s U n i v e r s i d a d e s
T e c n o l ó g i c a s d e l E s t a d o d e P u e b l a
sábado, 31 de enero de 2015
2. Introducción a LINQ
¿Porque LINQ?
Arquitectura de LINQ
Consultas en LINQ
LINQ y Tipos Genéricos
Variantes de LINQ
Acceso a Datos con LINQ
3. Language Integrated Query (LINQ) es un componente de Microsoft
.Net Framework 3.5 que añade la capacidad de realizar consultas
nativamente a través de los lenguajes .Net ( C#, VB) usando una sintaxis
similar a la de SQL.
Es un modelo de programación que simplifica y unifica la
implementación de acceso a cualquier tipo de datos.
LINQ no impone a usar una arquitectura especifica, mas bien facilita
la implementación de varias arquitecturas existentes para acceso a datos.
Visual Studio 2008 incluye ensamblados de proveedores para LINQ
que habilitan su uso en colecciones, bases de datos de SQL Server,
conjuntos de datos de ADO.NET, documentos XML y cualquier colección
de objetos que admita la interfaz IEnumerable o la interfaz genérica
IEnumerable<T> (espacio de nombres System.Collections.Generic)
4. Con frecuencia los programas deben acceder a
diferentes dominios de datos:
Un documento XML
Objetos en memoria
Una base de datos
Cada dominio de datos tiene su propio modelo de
acceso:
Base de datos -> SQL
XML -> DOM, Xquery
Se utilizan los mismos modelos de codificación para
consultar los datos en tipos de formatos y orígenes de
datos diferentes
Siempre trabaja con objetos
5.
6. La expresión básica de la consulta contiene tres clausulas SELECT – FROM –
WHERE
FROM especifica el origen de datos
WHERE aplica el filtro
SELECT especifica el tipo de los elementos devueltos
Aquí, lo importante es que, en LINQ, la propia variable de consulta no
realiza ninguna acción ni devuelve datos. Simplemente almacena la
información necesaria para generar los resultados cuando la consulta se
ejecute posteriormente.
7. LINQ trabaja en base a consultas, por lo tanto todas las operaciones se
componen de la siguiente manera:
En el ejemplo se muestra cómo se expresan las tres partes de una operación
de consulta en el código fuente. En el ejemplo se utiliza por comodidad una
matriz de enteros como origen de datos, pero los mismos conceptos se
aplican a otros orígenes de datos.
1. Obtención del Origen de Datos
2. Creación de la Consulta
3. Ejecución de la Consulta
8. En la ilustración se muestra la operación de consulta completa.
En LINQ, la ejecución de la consulta es distinta de la propia consulta; en otras
palabras, no se recuperan datos con la simple creación de la variable de consulta.
9. Las consultas LINQ se basan en tipos genéricos, que se incluyeron por
primera vez en el .Net Framework 2.0
1. Al crear una instancia de una clase de colección genérica List<T>, la T se
reemplaza con el tipo de objeto que contendrá la lista.
Por ejemplo, una lista de cadenas se expresa como List<string> y una lista
de objetos Customer se expresa como List<Customer>
2. IEnumerable<T> es la interfaz que permite enumerar las clases de
colección genéricas mediante la instrucción foreach.
Las clases de colección genéricas admiten IEnumerable<T> de la misma
forma que las clases de colección no genéricas, como ArrayList, admiten
IEnumerable
10. Las variables de consulta LINQ tienen tipos IEnumerable<T> o un tipo
derivado, como IQueryable<T>.
Cuando hay una variable de consulta de tipo IEnumerable<Customer>,
sólo significa que la consulta, cuando se ejecute, generará una secuencia
de cero o más objetos Customer.
11. Evitar la sintaxis genérica con el uso de la palabra clave var
La palabra clave var indica al compilador que deduzca el tipo de una
variable de consulta examinando el origen de datos especificado en la
cláusula FROM
La palabra clave var es útil cuando el tipo de la variable es obvio o cuando
no es tan importante especificar explícitamente los tipos genéricos
12. En la ilustración vemos el uso de la palabra clave var. Se genera el mismo código
compilado en ambos casos
13. LINQ to Objects
LINQ to Xml
LINQ to ADO .NET
oLINQ to DataSet
oLINQ to Entities
oLINQ to SQL
14. LINQ to Objects
Permite el acceso a datos en memoria usando la tecnología de LINQ
La condición es que esos datos expongan IEnumerable o
IEnumerable<T>
Los arrays, colecciones, listas, etc. cumplen con esta condición
15. LINQ to XML
Permite el acceso a datos XML usando la tecnología de LINQ
Puede consultar y modificar el documento
Permite escribir consultas en el documento XML en memoria para
recuperar colecciones de elementos y atributos
16. LINQ to ADO .NET
Permite el acceso a datos ADO .NET usando la tecnología de LINQ
Se incluyen otras dos tecnologías
LINQ to DataSet
LINQ to SQL
* Este será básicamente el tema que ampliaremos
17. Introducción a LINQ
¿Porque LINQ?
Arquitectura de LINQ
Consultas en LINQ
LINQ y Tipos Genéricos
Variantes de LINQ
Acceso a Datos con LINQ
18. LINQ to DataSet
Permite usar ADO .NET con LINQ
19. LINQ to DataSet
Simplificado mucho, llenamos el DataSet
y después construimos y ejecutamos
consultas LINQ sobre esos datos en
memoria.
20. Ejemplo 1 LINQ to DataSet
Este ejemplo utiliza Select para devolver todas las filas de la
tabla Product y mostrar los nombres de producto.
Proyecto: LINQ_to_DataSet1
21.
22. LINQ mantiene la consulta en la variable usada
Cada vez que usemos la variable se ejecutará la consulta
Esto nos permite tener la consulta siempre actualizada, es
lo que se conoce como ejecución aplazada (deferred
execution)
23. Si queremos que la consulta solo se ejecute una vez o de
forma inmediata, debemos usar algún método que la
"lance" y la saque del estado "hibernado" en el que está
Si queremos que esos datos siempre sean los mismos y no
nos interese que se actualicen, usaremos lo que se conoce
como ejecución inmediata
24. El "truco" es asignar esos datos a una variable usando el
método ToArray también ToList o ToDictionary
De esa forma, los datos que habrá en la variable de la
consulta permanecerán aunque se cambie algo que afecte a
la selección realizada
Aunque si se cambian algunos de esos datos, se reflejarán
los cambios, pero no se "refrescará" la consulta
25. Ejemplo 2 LINQ to DataSet
Este ejemplo muestra la ejecución inmediata utilizando el método
ToArray, aunque se agregó una fila, se mostraran los mismos datos.
Proyecto: LINQ_to_DataSet2
26. LINQ to SQL
Permite interactuar con SQL Server (solo soporta SQL Server y SQL
Server Compact 3.5)
Implementación de OR/M (mapeador de objetos relacionales)
Modelar bases de datos relacionales con clase .NET
Podemos consultar, actualizar, añadir, borrar
LINQ to SQL convierte las consultas integradas en el lenguaje
del modelo de objetos (C#) a SQL y las envía a la base de
datos para su ejecución.
Incluye compatibilidad con los procedimientos almacenados y
las funciones definidas por el usuario en la base de datos
27. LINQ to SQL - OR/Designer (Object Relational Designer)
Visual Studio 2008 viene con un diseñador de LINQ to SQL
que nos aporta una forma fácil de modelar y visualizar una
base de datos como un modelo de objeto
Usando este diseñador LINQ to SQL podemos crear fácilmente
una representación de la base de datos
Con este diseñador crear clases, métodos y demás monerías
solo es cuestión de ¡ arrastrar y soltar !
Con el diseñador de objetos relacionales, arrastraremos las
clases y los procedimientos almacenados (o funciones) y se
generará el código para acceder a ellos directamente
28. LINQ to SQL – OR/Designer
Visual Studio 2008 OR/Designer base de datos Northwind
Proyecto: LINQ_to_SQL1
29. Ejemplo LINQ to SQL
Este ejemplo muestra los registros en la tabla Products de la bd
Northwind donde el nombre de la categoría es Beverages
Proyecto: LINQ_to_SQL
30. Ejemplo LINQ to SQL
Método utilizado con la clase dbNorthwindDataContext como origen de datos y
asignar la consulta LINQ al dataGridView por medio de un bindingSource
Proyecto: LINQ_to_SQL