【发布时间】:2015-10-27 03:05:51
【问题描述】:
我正在尝试开发一个应用 Where 子句但“inputQuery.Where(condition)”语句无法编译的通用函数。我得到“参数 2:无法从 'System.Linq.Expressions.LambdaExpression' 转换为 'System.Linq.Expressions.Expression
public IQueryable<Object> ExecuteWhereClause(IQueryable<Object> inputQuery, Object typedValue, Type viewType, String paramName, Type paramType)
{
ParameterExpression parameter = Expression.Parameter(viewType);
Type[] typeArgs = { viewType, typeof(bool) };
var condition =
Expression.Lambda(
typeof(Func<,>).MakeGenericType(typeArgs),
Expression.Equal(
Expression.Property(parameter, paramName),
Expression.Constant(typedValue, paramType)
),
parameter
);
return inputQuery.Where(condition);
}
【问题讨论】:
-
为什么你扩展
IQueryable<Object>而不是IQueryable<T>?在你的情况下,你可以Expression.Lambda<Func<object,bool>( Expression.Equal( Expression.Property(parameter, paramName), Expression.Constant(typedValue, paramType) ), parameter)