Подтвердить что ты не робот

Как определить IsNull/NotNull при построении динамических выражений LINQ?

Я создаю динамическое выражение LINQ, которое позже оценивается. Так, например, если я хочу знать, является ли какое-то свойство равным некоторому значению, я делаю:

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

Тем не менее, я не могу найти способ обнаружить, если val Is Null или NOT Null. Может кто-нибудь порекомендовать мне, как это сделать? Я пробовал это:

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

но, очевидно, это не сработает.

4b9b3361

Ответ 1

ОК, получается @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);

Спасибо за помощь!