Construir linq dinámico a la expresión lambda Sql

expression-trees lambda linq linq-to-sql

Pregunta

Actualmente estoy buscando una forma en la que pueda crear una expresión lambda para mi consulta de Linq a SQL basada en la entrada del usuario en tiempo de ejecución. He estado buscando en la red, pero no puedo encontrar nada que sea útil. Si alguien me puede mostrar cómo hacer esto o si hay algún artículo bueno, hágamelo saber. ¡Muy apreciado!

Ejemplo:

Digamos que tengo esta consulta Linq:

var loc = (from l in Entity.Locations
           select l).Where(a => a.LocationId > 5);

¿Puede esta expresión a => a.LocationId > 5 ser construida en tiempo de ejecución? Dependiendo de si el usuario ha elegido LocationId. Si el usuario ha elegido Nombre, sería a => a.Name == "bla" .

He encontrado un artículo de Scott, pero preferiría una solución que me permita crear una expresión de tipo fuerte que permita detectar cualquier error posible en el momento de la compilación.

Cualquier información sería muy apreciada.

Gracias.

Respuesta aceptada

Puede crear nuevas expresiones LINQ que contengan expresiones antiguas.

var loc = (from l in Entity.Locations select l);

if (hasLocation)
    loc = loc.Where(a => a.LocationId > 5);

if (hasName)
    loc = loc.Where(a => a.Name == "bla");

etc.

La expresión solo se evalúa una vez que la usas, como var result = loc.ToList();



Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow
Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow