jueves, 21 de junio de 2007

Un poco de Orcas

Para quien no lo sabe este es el nombre del nuevo Visual Studio en su versión beta, dentro de las características más interesantes (según mi punto de vista) no encontramos con LINQ (Language Integrated Query) un lenguaje integrado de consultas (un grupo de extensiones según el sitio oficial), esto no nos dice mucho a primera vista, vamos a ver que nos permite. LINQ define unos operadores de consulta estandar que permiten a los lenguajes que lo permitan (C#, VB) realizar consultas sobre muchos tipos de colecciones (listas genéricas, arrays, xml, dataset, y cualquier IEnumerable) Veamos un poco de código
int[] numeros = { 1, 2, 3, 4, 54, 5, 6, 7, 8, 0 };

var pares = from n in numeros
            where (n % 2 == 0)
            select n;
foreach(int i in pares)
{
 Console.WriteLine(i);
}

Este es un ejemplo típico (es el que aparece en el video del sitio de linq) vamos a ver que corno dice. Primer declaramos un array de enteros, nada nuevo, luego viene la mágia. Aparece la palabra var esto indica que vamos a declarar un tipo anónimo, es decir que no tenemos idea de lo que va a ir dentro, los más puristas podemos pensar "esto tira por el piso toda la fuerte comprobación de tipos de C#" nada más falso, porque si en la siguiene línea quisieramos hacer pares ="hola" el compilador nos indicará que no se puede hacer una conversión implícita. Bueno, la expresión del lado derecho del = es la consulta LINQ, y dice algo como "Toma cada valor de numeros, ponelo en n y si este valor divido dos no tiene resto devolvelo como resultado), es decir, seleccionada los número pares del array y los pone en la variable pares. La siguiente línea es una simple iteración sobre la colección resultante. El poder de todo esto es enorme, y es mucho mayor si tenemos en cuenta que podemos hacerlo sobre un XML (xml fuertemente tipados como dice el blog de Daniel Cazzulino Linq to XSD) o sobre cualquier colección (incluso de objetos y evaluar en la expresión LINQ propiedades del mismo) y lo más mágico ocurre cuando lo asociamos a SQL Metal, esto lo contamos en la próxima entrada.