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

时间:2013-09-13 21:02:32

标签: c# asp.net-mvc linq entity-framework

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

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

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

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

但很明显,这不起作用。

1 个答案:

答案 0 :(得分:22)

好的,结果是@RaphaëlAlthaus是对的 - 问题部分在于我建立谓词。所以看起来这实际上确实给你空检查:

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

这意味着您可以在查询中动态应用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);

感谢您的帮助!