【发布时间】:2014-01-21 16:44:12
【问题描述】:
假设我有这种方法可以在我的数据库中搜索适合某个关键字的产品:
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 不支持 Invoke 方法。
当然,我可以用另一种方法 即 GetActiveByKeyword(string keyword) 但是我必须为每一种可能的变化做一个,包括我没有想到的那些......
如何让它工作?谢谢!
【问题讨论】:
标签: c# linq entity-framework predicate