我试图用谓词实现泛型方法。 我写了一些代码:
public ICollection<T> GetProductsByMatching<T>(Expression<Func<T, bool>> predicate)
{
return context.Products.Where(predicate).Include("ShopPlace, Images").ProjectTo<T>().ToList();
}
使用这种方法:
var a = service.GetProductsByMatching<ProductInfo>(x => x.Name.StartsWith("value")
|| x.Price < 150);
最后我有Invalid Operation Exception
:没有通用的方法&#39; Where&#39; on type&#39; System.Linq.Queryable&#39;与提供的类型参数和参数兼容。
我的代码有什么问题?谢谢你提前!
答案 0 :(得分:3)
context.Products.Where(predicate)
中的谓词显然只能是Expression<Func<Product, bool>>
,而不是Expression<Func<T, bool>>
,因为无法保证T
是Product
。
您尝试过滤目标类型的谓词,而过滤必须在源类型上进行:
public ICollection<T> GetProductsByMatching<T>(Expression<Func<Product, bool>> predicate)
{
return context.Products.Where(predicate)
.Include("ShopPlace, Images")
.ProjectTo<T>()
.ToList();
}