通过匹配谓词方法获取项目

时间:2016-03-31 11:17:15

标签: c# entity-framework linq

我试图用谓词实现泛型方法。 我写了一些代码:

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;与提供的类型参数和参数兼容。

我的代码有什么问题?谢谢你提前!

1 个答案:

答案 0 :(得分:3)

context.Products.Where(predicate)中的谓词显然只能是Expression<Func<Product, bool>>,而不是Expression<Func<T, bool>>,因为无法保证TProduct

您尝试过滤目标类型的谓词,而过滤必须在源类型上进行:

public ICollection<T> GetProductsByMatching<T>(Expression<Func<Product, bool>> predicate)
{
    return context.Products.Where(predicate)
                           .Include("ShopPlace, Images")
                           .ProjectTo<T>()
                           .ToList();

}