2017-04-07 98 views
2

我想用linq謂詞生成過濾器代碼。當我使用一個謂語用對象= NULL:C#Linq謂詞生成從列表中刪除所有空值

public static IQueryable<ContactPermitsSearch> FilterByNameMailingPermit(this IQueryable<ContactPermitsSearch> queryable, string search, bool filterOn) 
    { 
     var predicate = PredicateBuilder.True<ContactPermitsSearch>(); 

     predicate = predicate.And(PermitNumberNotNull()); 

     var filtered = queryable.AsExpandable().Where(predicate); 
     return filtered; 
    } 

時產生不包括PermitNumberNotNull謂語句的SQL語句:

public static Expression<Func<ContactPermitsSearch, bool>> PermitNumberNotNull() 
    { 
     Expression<Func<ContactPermitsSearch, bool>> predicate = contactPermit => contactPermit.PermitNumber != null; 
     return predicate; 
    } 

這是由調用。

修復此問題的想法?

回答

0

代碼沒有任何明顯的錯誤。我相信,如果您在調試器中檢查predicate後與PermitNumberNotNull()合併,您會看到非空謂詞是表達式樹的一部分。

唯一合理的假設是,EF知道contactPermit.PermitNumber不能爲空,因爲它的需要屬性。因此,它簡單地忽略了謂詞。

+0

這就是答案!謝謝!它是一個不可空的varchar(7)。 –