У меня есть метод расширения для динамического фильтрации результатов Linq to Entities с использованием строковых значений. Он отлично работает, пока я не использую его для фильтрации столбцов с нулевым значением. Здесь мой код:
public static IOrderedQueryable<T> OrderingHelperWhere<T>(this IQueryable<T> source, string columnName, object value)
{
ParameterExpression table = Expression.Parameter(typeof(T), "");
Expression column = Expression.PropertyOrField(table, columnName);
Expression where = Expression.GreaterThanOrEqual(column, Expression.Constant(value));
Expression lambda = Expression.Lambda(where, new ParameterExpression[] { table });
Type[] exprArgTypes = { source.ElementType };
MethodCallExpression methodCall = Expression.Call(typeof(Queryable),
"Where",
exprArgTypes,
source.Expression,
lambda);
return (IOrderedQueryable<T>)source.Provider.CreateQuery<T>(methodCall);
}
Вот как я его использую:
var results = (from row in ctx.MyTable select row)
.OrderingHelperWhere("userId", 5);//userId is nullable column
Здесь исключение, которое я получаю, когда я использую это для столбцов таблицы с нулевым значением:
Бинарный оператор GreaterThanOrEqual не определен для типов "System.Nullable`1 [System.Int32]" и "System.Int32"
Я не мог понять это. Что мне делать?