2011-10-16 223 views
5

我雖然搜索了堆棧溢出的很多帖子來給我一個答案,但我還不清楚。我只是尋找一些簡單的方法來構建動態查詢。我能夠在where子句中進行涉及單個表達式的簡單查詢,但我無法找到處理多個表達式的簡單方法。我有使用NHibernate標準API的經驗,這對於快速和編譯時安全的查詢構造非常方便。我雖然在EntityFramework上會有類似的東西,但到目前爲止沒有運氣。除了手動構建字符串查詢之外,有沒有簡單的方法?看看下面的代碼,我認爲它應該工作,但事實並非如此。實際上,它不會在多個lambda表達式上構建查詢。我期待每個呼叫都會在where子句中添加一個AND表達式。我錯過了什麼嗎?動態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>(); 

回答

6

IQueryable是不可變的;您不能(直接)修改現有的IQueryable的查詢。 query.Where返回一個新的IQueryable與一個額外的where子句。

你對這些新的IQueryable s沒有做任何事情。

你需要寫

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

打我1毫秒 – Icarus