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

nik*_*3ro 15 c# linq asp.net-mvc entity-framework

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

// MemberExpression property;
// int? val;
Expression.Equal(property, Expression.Constant(val))
Run Code Online (Sandbox Code Playgroud)

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

Expression.Equal(property, Expression.Constant(null, property.Type));
Run Code Online (Sandbox Code Playgroud)

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

nik*_*3ro 22

好的,结果是@RaphaëlAlthaus是对的 - 问题部分在于我构建谓词.所以这似乎确实给你空检查:

Expression.Equal(property, Expression.Constant(null, property.Type));
Run Code Online (Sandbox Code Playgroud)

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

// IQueryable<T> 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<Func<T, bool>>(exp, arg);
return query.Where(predicate);
Run Code Online (Sandbox Code Playgroud)

谢谢您的帮助!