I'm building dynamic LINQ expression that is later evaluated. So for example if I want to know if certain property is equal to some value I do:
// MemberExpression property;
// int? val;
Expression.Equal(property, Expression.Constant(val))
However, I can't seem to find a way to detect if val Is Null or NOT Null. Can somebody recommend to me how to do that? I've tried this:
Expression.Equal(property, Expression.Constant(null, property.Type));
but obviously, that won't work.
OK, turns out @Raphaël Althaus was right - the problem is in part where I build predicate. So it seems this actually does give you null check:
Expression.Equal(property, Expression.Constant(null, property.Type));
Meaning that you can apply Where condition dynamically on query like:
// 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);
Thanks for the help!
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With