martes, 25 de marzo de 2014

Introducción a LINQ

LINQ (Microsoft.NET Language Integrated Query) es a la vez un lenguaje, y una extensión del Microsoft .NET Framework. Fue introducido con la versión 3.5 del Framework de .NET, para constituirse en un puente entre la programación de objetos y trabajar con los datos.

LINQ convierte el acceso a datos y las consultas en un lenguaje construido en Visual Basic o en Visual C#. Provee un modelo consistente para trabajar con los datos sin importar de donde vienen los datos. Por lo tanto la programación con LINQ permite utilizar todas las características propias de la programacion, para hacer el tratamiento de los datos más fácil y consistente.

LINQ cambia la manera en que accedemos y consultamos datos. Antes que LINQ fuera creado, las mayoría de las consultas se escribían y ejecutaban directamente contra la Base datos, por lo que dicho texto SQL dependía fuertemente de la tecnología subyacente.
LINQ posee dos ventajas principales:

  • La primera de ellas es que se realiza un chequeo de los objetos LINQ en tiempo de compilación, por lo que es posible de encontrar y descubrir más facilmente los errores, además de la posibilidad de utilizar IntelliSense para hacer más fácil escribir el código fuente.
  • La segunda, es que provee un modelo consistente para realizar las consultar contra todas las tecnologías de base de datos, y todo tipo de objetos, incluyendo listas, XML, arrays, etc.






LINQ permite realizar consultas a cualquier objeto que soporte la interface, IEnumerable o IEnumerable<T>; lo que serían todas las colecciones de datos, incluídos los DataSet, List<T>, Array y muchos más.

Supongamos que tenemos una lista de objetos Empleado, esta lista es llamada empleados. En dicha lista, por medio de la utilización de LINQ podremos obtener todos los empleados que trabajan en el departamento IT, de la siguiente manera:

IEnumerable<Employee> empQuery = from emp in empleados
                                 where emp.departamento == "IT"
                             select emp;

Los tipos más comunes en los que se puede grabar el resultado de LINQ, son IEnumerable<T> e IQueryable<T>, de todas maneras puede saltarse esta asignación, y utilizar, directamente la palabra reservada var:

var empQuery = from emp in empleados
               where emp.departamento == "IT"
              select emp;

Hay que tener en cuenta, que cuando se asigna la consulta LINQ a una variable sobre es eso, se guarda en la variable, pero no se ejecuta hasta que no se itera a través de la misma, por ejemplo con un bloque foreach

foreach (var emp in empQuery)
{
   Console.WriteLine(emp.departamento);
}

Otras maneras para que la consulta se ejecute, es usar algunas de las funciones de agregación: Count, Max, Average, First.

int cant = empQuery.Count();

También pueden utilizarse los métodos ToList<T> o ToArray<T> para ejecutar la consulta y guardar los resultados en una lista de objetos o en un array.

List<empleado> empQuery = (from emp in empleados
                          where emp.departamento == "IT"                                 select emp).ToList();