Ответ 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);
Спасибо за помощь!