Blog del CIIN

Blog del Centro de Innovación en Integración de Cantabria

This Blog

Syndication

Search

Tags

Community

Email Notifications

Archives

Enlaces Recomendados

Dynamic LINQ o como construir consultas dinámicas con LINQ!

Una de las preguntas más típicas que surgen cuando he impartido algún seminario en el que se trata algún tema de LINQ es como se pueden construir consultas dinámicas con LINQ, porque aparentemente LINQ no parece admitir este escenario puesto que la idea es escribir lo que el genial (uno de los grandes "culpables" de el diseño y creación de LINQ)  Scott Guthrie denomina consultas "type-safe", es decir, consultas en las que tenemos soporte para intellisense, refactoring y comprobación de tipos en tiempo de compilación...pero, que pasa (escenario bastante habitual) si necesito una cierta flexibilidad que implique poder construir consultas más o menos dinámicas (por ejemplo, realizar consultas cambiantes en función de los datos de negocio seleccionados por el usuario de una cierta aplicación)...la clave está en la palabra "aparentemente", puesto que como viene siendo habitual en los últimos tiempos, LINQ y las innovaciones en el lenguaje proporcionan los elementos adecuados para construir estas consultas dinámicas. En este caso estamos hablando de la LINQ Dynamic Query Library (System.Linq.Dynamic), de la que tenemos ejemplos de uso en la página de ejemplos descargables de VS 2008, o bien:

Si nos bajamos cualquiera de los archivos de los vínculos anteriores, veremos que se trata de un conjunto de ejemplos sobre LINQ, siendo uno de los mismos el de Dynamic Query. Al abrir la solución, podremos ver que aparte de hacer referencia a la librería comentada (y que es una clase del proyecto de ejemplo que podemos usar), la construcción de una consulta LINQ dinámica tendría la siguiente forma:

Northwind db = new Northwind(connString);
db.Log = Console.Out;

var query =
    db.Customers.Where("City == @0 and Orders.Count >= @1", "London", 10).
    OrderBy("CompanyName").
    Select("New(CompanyName as Name, Phone)");

Como vemos, la clave está basada en la definición de expresiones tipo cadena, en lugar de código...¿y cómo es posible esto? Pues a través de una serie de métodos de extensión que permiten construir consultas en base a expresiones en cadena en lugar de las habituales expresiones lambda. Junto con el ejemplo de uso e la Dynamic Query Library viene algo de documentación sobre como utilizarla. Finalmente, comentaros que se puede utilizar para cualquier extensión de LINQ: LiNQ To Objects, LINQ To SQL, LINQ To XML, ...

Published 29/1/2008 17:35 por Juan Carlos González Martín

Archivado en: ,
Comparte este post:

Comentarios

# re: Dynamic LINQ o como construir consultas dinámicas con LINQ!@ Tuesday, January 29, 2008 10:42 PM

Hola, Juan Carlos!

Perdón por el "comercial". En mi libro "C# 3.0 y LINQ" se habla sobre esa API, se mencionan sus inconvenientes y se presenta un ejemplo.

Saludos - Octavio

Octavio Hernández

# re: Dynamic LINQ o como construir consultas dinámicas con LINQ!@ Tuesday, January 29, 2008 11:52 PM

Hola Octavio!

Gracias por el apunte...ahora además de la referencia al blog de Scott Guthrie podré dar la de tu libro, que por otro lado tendré que leer para adquirir una mejor visión de lo que sobre LINQ en general estoy aprendiendo.

Gracias

JC's

Juan Carlos González Martín

# re: Dynamic LINQ o como construir consultas dinámicas con LINQ!@ Sunday, March 21, 2010 3:57 PM

Igual digo una tontería, pero tengo instalado el visual estudio 2008 y no tengo el espacio de nombres System.Linq.Dynamic.

Rubén