2014-01-21 72 views
0

比方說,我有這樣的方法來SEACH我的數據庫爲符合特定關鍵字的產品:的EntityFramework - 添加表達where子句

public List<Product> GetByKeyword(string keyword) 
{ 
    using(var db = new DataEntities()) 
    { 
     var query = db.Products.Where(x => x.Description.Contains(keyword); 
     return query.ToList(); 
    } 
} 

這工作得很好,但其他地方在我的項目,我想有效產品只有,仍由關鍵字。我想這樣做:

... 
var result = ProductStore.GetByKeyword("Apple", x => x.isActive == 1); 

因此,我創造了這個方法:

public List<Product> GetByKeyword(string keyword, Func<Product, bool> predicate = null) 
{ 
    using(var db = new DataEntities()) 
    { 
     var query = db.Products.Where(x => x.Description.Contains(keyword); 
     if(predicate != null) 
      query = query.Where(x => predicate(x)); 

     return query.ToList(); 
    } 
} 

這枚編譯好了,ToList()調用生成NotSupportedException異常因爲LINQ不支持調用方法。

當然,我可以用另一種方法 即GetActiveByKeyword(字符串關鍵字)但我會做一個對每個可能的變化,包括那些我沒想到......

給它

我如何得到這個工作?謝謝!

回答

2

是不是隻是這樣的:

if(predicate != null) 
      query = query.Where(predicate); 
+0

它不像這樣編譯,但是如果我將參數更改爲** Expression > **,它就可以工作。我之前嘗試過,我不知道現在它爲什麼起作用... –

0

它只是作爲AD.Net說爲什麼它與Expression之前的作品是因爲如果你說的編譯器知道這將是一個lambda表達式

的原因