Documente Academic
Documente Profesional
Documente Cultură
Indice
Introduccin 2. Proyecciones (select) 3. Filtros 4. Ordenamiento 5. Joins 6. Agrupamiento 7. Operadores de elemento (first, last, single) 8. Mtodos de agregacin (sum, min, max) 9. Cuantificadores (any, all, contains) 10.LINQ to SQL 11.DataContext 12.Transacciones
1.
Indice
Introduccin 2. Proyecciones (select) 3. Filtros 4. Ordenamiento 5. Joins 6. Agrupamiento 7. Operadores de elemento (first, last, single) 8. Mtodos de agregacin (sum, min, max) 9. Cuantificadores (any, all, contains) 10.LINQ to SQL 11.DataContext 12.Transacciones
1.
1. Introduccin
LINQ permite crear expresiones de consulta, es decir, usar las instrucciones tpicas de las consultas de SQL: SELECT, FROM, JOIN, WHERE, ORDER BY, GROUP BY. La idea principal es la de poder realizar funciones de consulta de datos (XML, colecciones y objetos, bases de datos, etc) de forma integrada. Para que LINQ sea posible, se agregaron las caractersticas de Inferencia de tipos, Tipos annimos, Extensiones, etc. Todos los arreglos, listas, etc, permiten las consultas LINQ.
La variable qry es una coleccin genrica y enumerable de integers. Ms exactamente: System.Collections.Generic.IEnumerable(Of Integer).
La coleccin devuelta se puede recorrer con un bucle For Each. Consulta equivalente en su forma de expresin lambda
1. Introduccin
continuacin
Visual Studio 2008 facilita las consultas y el acceso a estas extensiones, permitiendo escribir sencilla e intuitivamente sentencias tipo SQL dentro del cdigo de VB o C#. Estas sentencias luego son convertidas en llamadas a las extensiones y expresiones lambda. La aplicacin LINQPad permite utilizar LINQ de forma idntica que VS2008, pero simplifica el mapeo de tablas de SQL, y adems cuenta con la funcin Dump() que permite imprimir el resultado de una consulta sin necesidad de un bucle For Each.
Algunos de los ejemplos de esta presentacin estn en el formato de LINQPad.
Operadores Linq.bmp
Indice
Introduccin 2. Proyecciones (select) 3. Filtros 4. Ordenamiento 5. Joins 6. Agrupamiento 7. Operadores de elemento (first, last, single) 8. Mtodos de agregacin (sum, min, max) 9. Cuantificadores (any, all, contains) 10.LINQ to SQL 11.DataContext 12.Transacciones
1.
2. Proyecciones
Uso de Let
Let permite declarar variables temporales para usar en cualquier parte de la consulta
Subquerys
Obtiene todas las carpetas de C:\ y los archivos dentro de stas menores a 1KB. La palabra From puede aparecer varias veces en una consulta indicando un subquery. proy_.vb
Indice
Introduccin 2. Proyecciones (select) 3. Filtros 4. Ordenamiento 5. Joins 6. Agrupamiento 7. Operadores de elemento (first, last, single) 8. Mtodos de agregacin (sum, min, max) 9. Cuantificadores (any, all, contains) 10.LINQ to SQL 11.DataContext 12.Transacciones
1.
3. Filtros
Filtro Simple
Filtro Indexado
Tanto en el Where como en el Select puede utilizarse el segundo parmetro de una expresin lambda para referirse a la posicin del elemento dentro de la coleccin. En este caso se obtienen los elementos que estn en posiciones pares (claudia, maria y juan).
Indice
Introduccin 2. Proyecciones (select) 3. Filtros 4. Ordenamiento 5. Joins 6. Agrupamiento 7. Operadores de elemento (first, last, single) 8. Mtodos de agregacin (sum, min, max) 9. Cuantificadores (any, all, contains) 10.LINQ to SQL 11.DataContext 12.Transacciones
1.
4. Ordenamiento
Las extensiones OrderBy y OrderByDescending permiten ordenar una secuencia bajo un criterio especificado.
Se ordena la coleccin de strings nombres por el tamao de sus elementos en forma descendente.
OrderBy.vb
Indice
Introduccin 2. Proyecciones (select) 3. Filtros 4. Ordenamiento 5. Joins 6. Agrupamiento 7. Operadores de elemento (first, last, single) 8. Mtodos de agregacin (sum, min, max) 9. Cuantificadores (any, all, contains) 10.LINQ to SQL 11.DataContext 12.Transacciones
1.
5. Joins
Esta instruccin ser reemplazada por su equivalente en lambda que utiliza la extensin Join
La misma consulta sin utilizar el Join. En este caso la instruccin ser reemplazada por la extensin SelectMany. Esta forma es ms lenta.
El resultado:
Join.linq
Indice
Introduccin 2. Proyecciones (select) 3. Filtros 4. Ordenamiento 5. Joins 6. Agrupamiento 7. Operadores de elemento (first, last, single) 8. Mtodos de agregacin (sum, min, max) 9. Cuantificadores (any, all, contains) 10.LINQ to SQL 11.DataContext 12.Transacciones
1.
6. Agrupamiento
Luego del Group by, la variable a queda fuera del alcance, por eso se utiliza la sentencia Into para poder acceder a los elementos de cada grupo. Cada elemento de la coleccin devuelta (g) ser una coleccin de Archivos de cada grupo.
Luego del Group by, puede ir una sentencia where que filtre los datos ya agrupados. Es el equivalente al Having de SQL.
Archivos agrupados por carpetas. Slo las carpetas que tengan ms de 2 archivos.
Group.linq
6. Agrupamiento
Para poder acceder a la llave del grupo es necesario guardarla en una variable. En este caso k.
Cada elemento de la coleccin devuelta contendr a su vez dos elementos: la llave k y el grupo g.
Group.linq
Indice
Introduccin 2. Proyecciones (select) 3. Filtros 4. Ordenamiento 5. Joins 6. Agrupamiento 7. Operadores de elemento (first, last, single) 8. Mtodos de agregacin (sum, min, max) 9. Cuantificadores (any, all, contains) 10.LINQ to SQL 11.DataContext 12.Transacciones
1.
7. Operadores de elemento
Igual que las anteriores pero en caso de no existir elemento, devuelve un valor por defecto.
OperadoresElemento.linq OperadoresElemento.vb
Indice
Introduccin 2. Proyecciones (select) 3. Filtros 4. Ordenamiento 5. Joins 6. Agrupamiento 7. Operadores de elemento (first, last, single) 8. Mtodos de agregacin (sum, min, max) 9. Cuantificadores (any, all, contains) 10.LINQ to SQL 11.DataContext 12.Transacciones
1.
8. Mtodos de agregacin
Son operadores (extensiones) que permiten aplicar una operacin a un conjunto de datos de una coleccin. Algunos son: Min, Max, Sum, Count, Average
La palabra Aggregate puede comenzar una consulta y en ese caso la consulta devolver un valor discreto o un valor annimo y no una coleccin enumerable.
Se puede devolver ms de una agregacin por consulta, en ese caso la consulta retorna un tipo annimo. Agregacion.vb
Indice
Introduccin 2. Proyecciones (select) 3. Filtros 4. Ordenamiento 5. Joins 6. Agrupamiento 7. Operadores de elemento (first, last, single) 8. Mtodos de agregacin (sum, min, max) 9. Cuantificadores (any, all, contains) 10.LINQ to SQL 11.DataContext 12.Transacciones
1.
9. Cuantificadores
Los cuantificadores son las extensiones Contains, Any y All. Buscan en una secuencia de elementos y evalan si la secuencia cumple o no una condicin. Retornan un valor booleano.
Contain s
Determina si un elemento pertenece a la coleccin.
Any
o bien: Determina si algn elemento de la coleccin comple cierta condicin.
All
Determina si todos los elementos de la coleccin cumplen cierta condicin. Cuantificadores.vb
Indice
Introduccin 2. Proyecciones (select) 3. Filtros 4. Ordenamiento 5. Joins 6. Agrupamiento 7. Operadores de elemento (first, last, single) 8. Mtodos de agregacin (sum, min, max) 9. Cuantificadores (any, all, contains) 10.LINQ to SQL 11.DataContext 12.Transacciones
1.
Permite la creacin y manejo de la capa de acceso a datos contra una BD relacional. LINQ to SQL slo soporta Microsoft SQL Server, pero existen desarrollos independientes para MySql, Oracle y PostgreSQL. Para poder utilizar LINQ to SQL se necesita:
Un objeto DataContext
Mapeo de las entidades a clases (DBML, SqlMetal.exe, manualmente) Referencias a System.Linq y System.Data.Linq
LINQ_EJ1.sln LINQ_EJ2.sln
Indice
Introduccin 2. Proyecciones (select) 3. Filtros 4. Ordenamiento 5. Joins 6. Agrupamiento 7. Operadores de elemento (first, last, single) 8. Mtodos de agregacin (sum, min, max) 9. Cuantificadores (any, all, contains) 10.LINQ to SQL 11.DataContext 12.Transacciones
1.
11. DataContext
El objeto DataContext de LINQ es el encargado de hacer de interface entre las entidades que son representadas (SQL) y el programa que las utiliza. Es la fuente de todas las entidades mapeadas. Garantiza que las entidades que se consulten ms de una vez, hagan referencia a la misma instancia de la clase que las representa. Algunos de los mtodos de un DataContext son:
GetTable Refresh SubmitChanges ExecuteQuery
Retorna una tabla de la BD
System.Data.Linq.Table(Of T)
Indice
Introduccin 2. Proyecciones (select) 3. Filtros 4. Ordenamiento 5. Joins 6. Agrupamiento 7. Operadores de elemento (first, last, single) 8. Mtodos de agregacin (sum, min, max) 9. Cuantificadores (any, all, contains) 10.LINQ to SQL 11.DataContext 12.Transacciones
1.
12. Transacciones
Explcita distribuible
Si las llamadas a SubmitChanges() estn dentro de un TransactionScope, de System.Transactions, LINQ no crear una transaccin y no cerrar la conexin. Ser responsabilidad del usuario indicar en qu momento se completar la transaccin. Estas transacciones deben utilizarse slo cuando se requieran transacciones multi-servidor.
Implcita
Al llamar al mtodo SubmitChanges(), si no se est en ninguno de los casos anteriores (propiedad Transaction, TransactionScope), LINQ crear una transaccin local con todos los cambios pendientes en la base de datos.
Transacciones.vb
12. Transacciones
Explcita Local
Se asigna la propiedad Transaction. Las diferentes llamadas a SubmitChanges() se ejecutan en la misma transaccin local.
Explcita Distribuible
Las llamadas a SubmitChanges() estn dentro de un TransactionScope. Se ejecutan en una misma transaccin distribuida. Implica DTS y referencia a System.Transactions. Slo usar en aplicaciones multi-servidor.
Implcita Local
Por defecto, cada llamada a SubmitChanges() se ejecuta en una transaccin local direfente. Transacciones.vb
Referencias
LINQPad
http://www.linqpad.net/
http://www.thecodeproject.com
Microsoft MSDN
http://msdn.microsoft.com
http://www.codeproject.com/KB/dotnet/vbnet_c__difference.aspx