2011-10-16 41 views
5

Busqué muchas publicaciones en el desbordamiento de la pila para obtener una respuesta, pero todavía no estoy claro. Solo busco una forma simple de crear consultas dinámicas. Pude hacer consultas simples que implican una sola expresión en cláusula where, pero no puedo encontrar ninguna forma fácil de manejar múltiples expresiones. Tengo experiencia en trabajar con la API de criterios de NHibernate, que es muy útil para construcciones de consulta rápidas y compiladas de manera segura. Creo que algo similar estará disponible en EntityFramework, pero hasta ahora no tuve suerte. ¿Hay alguna manera fácil además de la creación manual de consultas de cadenas? Eche un vistazo al siguiente código. Pensé que debería funcionar, pero no es así. En realidad, no genera consultas sobre múltiples expresiones lambda. Esperaba que cada llamada agregara una expresión AND a cláusula where. Me estoy perdiendo de algo ?Dynamic SQL Query Entity Framework

var query = Entities.Current.Jobs.AsQueryable<Job>(); 

      if (!string.IsNullOrEmpty(keywords)) 
      { 
       query.Where(j => j.Title.Contains(keywords) || j.Description.Contains(keywords)); 
      } 

      if (industryId > 0) 
      { 
       query.Where(j => j.IndustryId == industryId); 
      } 

      if (countyId > 0) 
      { 
       query.Where(j => j.CountyId == countyId); 
      } 

      return query.ToList<Job>(); 

Respuesta

6

IQueryable es inmutable; no puede (directamente) modificar la consulta de un existente IQueryable. query.Where devuelve un nuevo IQueryable con una cláusula where adicional.

No está haciendo nada con estas nuevas IQueryable s.

tiene que escribir

query = query.Where(...) 
+0

Batir durante 1 milisegundo – Icarus