2011-10-16 17 views
5

Ho cercato molti messaggi nello stack overflow per ottenere una risposta, ma non sono ancora chiaro. Sto solo cercando un modo semplice per creare query dinamiche. Sono stato in grado di eseguire query semplici che coinvolgono la singola espressione nella clausola where, ma non sono in grado di trovare un modo semplice per gestire più espressioni. Ho esperienza di lavorare con l'API di criteri di NHibernate che è molto utile per costruzioni di query sicure in tempi rapidi e di compilazione. Penso che qualcosa di simile sarà disponibile su EntityFramework, ma finora non ha avuto fortuna. C'è un modo semplice oltre a costruire manualmente le query stringa? Dai un'occhiata al seguente codice, ho pensato che dovrebbe funzionare, ma non è così. In realtà non crea query su più espressioni lambda. Mi aspettavo che ognuno in cui la chiamata aggiungesse un'espressione AND alla clausola where. Mi sto perdendo qualcosa ?Dynamic Entity Framework query SQL

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>(); 

risposta

6

IQueryable è immutabile; non è possibile (direttamente) modificare la query di uno esistente IQueryable. query.Where restituisce un nuovo IQueryable con una clausola where aggiuntiva.

Non stai facendo nulla con questi nuovi IQueryable s.

è necessario scrivere

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

me battere per 1 millisecondo – Icarus