Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to detect IsNull / NotNull when building dynamic LINQ expressions?

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.

like image 843
nikib3ro Avatar asked Sep 13 '13 21:09

nikib3ro


1 Answers

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!

like image 63
nikib3ro Avatar answered Oct 08 '22 00:10

nikib3ro