实体框架IQueryable没有where子句

本文关键字:where 子句 没有 IQueryable 框架 实体 | 更新日期: 2023-09-27 18:26:56

我有以下辅助方法:

public static IQueryable<T> All<T>(this IUnitOfWork unitOfWork)
    where T : class
{
    return unitOfWork.Context.Set<T>();
}
public static T Find<T>(this IUnitOfWork unitOfWork, Func<T, bool> predicate)
    where T : class
{
    return unitOfWork.All<T>().FirstOrDefault(predicate);
}

当我这样叫第二个时:

var payment = _unitOfWork.Find<ContactRow>
                          (p => p.PaymentAttemptRef == paymentAttemptRef 
                             && p.ContactType == type);

我希望谓词成为查询的一部分!!但问题是生成的select没有where子句,并且会拉回到表中的所有行。

知道为什么会发生这种事吗?第二个方法调用第一个方法,第一个方法返回一个iquryable,所以我想这样做不行?

实体框架IQueryable没有where子句

您需要更改扩展方法以获取Expression<Func<T, bool>>,以便将其转换为SQL。