2017-04-07 69 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)。 –