16

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

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

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

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

但显然,那是行不通的。

4

1 回答 1

24

好的,事实证明@Raphaël Althaus 是对的——问题部分出在我构建谓词的地方。所以看起来这实际上确实给了你空检查:

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);

谢谢您的帮助!

于 2013-09-13T21:40:01.227 回答