我在 LINQ to Entities 中有以下查询:
var query = from p in db.Products
where p.Price > 10M
select p;
此时查询尚未执行,我想编写一个查询,该查询将根据某些条件返回真/假:
return query.Any(p => p.IsInStock &&
(p.Category == "Beverage" ||
p.Category == "Other"));
这很好用;但是,我想从我的代码中得到一些重用。我有很多方法需要根据类别是饮料还是其他进行过滤,所以我尝试创建一个委托:
Func<Product, bool> eligibleForDiscount = (product) => product.Category == "Beverage" || product.Category == "Other";
我想用委托代替内联检查:
return query.Any(p => p.IsInStock && eligibleForDiscount(p));
这给了我一个错误,说 LINQ to Entities 不支持 Invoke。为什么我不能用内联代码代替这样的委托,有什么办法可以通过其他方式完成我的重用?