【发布时间】:2011-04-21 18:45:52
【问题描述】:
我有一个扩展方法可以使用字符串值动态过滤 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
当我将它用于可空表列时,我遇到了一个异常:
没有为“System.Nullable`1[System.Int32]”和“System.Int32”类型定义二元运算符GreaterThanOrEqual
我想不通。我该怎么办?
【问题讨论】:
标签: c# entity-framework linq lambda expression-trees