2015-12-14 86 views
0

我有這些輔助方法:實體框架的IQueryable沒有where子句

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子句並且拉回表中的所有行。

任何想法爲什麼會發生這種情況?第二種方法調用第一個,它返回一個iqueryable,所以我認爲它會做到這一點?

回答

5

您需要將您的擴展方法更改爲Expression<Func<T, bool>>,以便將其轉換爲SQL。