Trabajar con tipos anulables en árboles de expresión
Tengo un método de extensión para filtrar dinámicamente los resultados de Linq to Entities usando valores de cadena. Funciona bien hasta que lo use para filtrar columnas anulables. Aquí está mi código:
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);
}
Así es como lo uso:
var results = (from row in ctx.MyTable select row)
.OrderingHelperWhere("userId", 5);//userId is nullable column
Aquí está la excepción que obtengo cuando uso esto para columnas de tabla anulables:
El operador binario GreaterThanOrEqual no está definido para los tipos 'System.Nullable`1 [System.Int32]' y 'System.Int32'
No pude resolver esto. ¿Qué tengo que hacer?