比方說,我有這樣的方法來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(字符串關鍵字)但我會做一個對每個可能的變化,包括那些我沒想到......
給它我如何得到這個工作?謝謝!
它不像這樣編譯,但是如果我將參數更改爲** Expression> **,它就可以工作。我之前嘗試過,我不知道現在它爲什麼起作用... –