如何在构建动态LINQ表达式时检测IsNull / NotNull?

我正在构建动态LINQ表达式,稍后会对其进行评估。 因此,例如,如果我想知道某些属性是否等于某个值,我会这样做:

// MemberExpression property; // int? val; Expression.Equal(property, Expression.Constant(val)) 

但是,我似乎无法找到一种方法来检测val是Null还是NOT Null。 有人可以向我推荐怎么做吗? 我试过这个:

 Expression.Equal(property, Expression.Constant(null, property.Type)); 

但很明显,那是行不通的。

好吧,原来@RaphaëlAlthaus是对的 – 问题部分在于我构建谓词。 所以它似乎确实给你空检查:

 Expression.Equal(property, Expression.Constant(null, property.Type)); 

这意味着您可以在查询中动态应用Where条件,例如:

 // IQueryable query; // var arg = Expression.Parameter(typeof(T), "p"); var exp = Expression.Equal(property, Expression.Constant(null, property.Type)); // for NOT NULL use Expression.NotEqual var predicate = Expression.Lambda>(exp, arg); return query.Where(predicate); 

谢谢您的帮助!