【发布时间】:2016-02-05 04:47:58
【问题描述】:
我有一个基于传递给该方法的对象的类型构建表达式树的方法。构建树后,我想将其转换并返回返回类型,如下所示。
public static Expression<Func<object, bool>> BuildExpression(Type type, ...)
{
// build the expression...
ParameterExpression param = Expression.Parameter(type, "m");
Expression expression = null;
// simplified version of building the expression tree
MemberExpression member = Expression.Property(param, filter.Property);
ConstantExpression constant = Expression.Constant(filter.Value);
expression = Expression.Equal(member, constant);
// ...
// IT FAILS ON THIS LINE!!!
return Expression.Lambda<Func<object, bool>>(expression, param);
}
我查看了一些转换答案,但无济于事。有什么建议吗?
【问题讨论】:
-
你能展示一下这个函数的使用示例吗?
-
当给定错误类型时,表达式应该怎么做?抛出异常?返回
false?还有什么? -
需要帮助就需要配合。通常
Expression<Func<Foo, bool>>不能被视为Expression<Func<object, bool>>,原因与List<Foo>不能被视为List<object>相同。提供真实用例以获得正确的解决方案。 -
正如伊万指出的那样。在将参数传递给成员表达式之前,您应该使用
Expression.Convert(param, type)。并且参数也应该定义为对象 -Expression.Parameter(typeof(Object), "m")
标签: c# lambda expression-trees