繁体   English   中英

将Expression转换为Expression.Lambda <Func<object, bool> &gt;

[英]Convert Expression to Expression.Lambda<Func<object, bool>>

我有一个根据传递给该方法的对象的类型来构建表达式树的方法。 生成树后,我要对其进行转换,并使用如下所示的返回类型将其返回。

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);
}

我看了一些转换答案,但无济于事。 有什么建议吗?

这是经过修改的代码,如我之前的评论中所述。

1)您的函数返回使用单个参数描述函数的表达式。 这个参数是Object类型的。 因此,在创建参数“ m”表达式时应使用Object类型。

2)在访问属性参数之前,应将其强制转换回所需的类型。 参见Expression.Convert

public static Expression<Func<object, bool>> BuildExpression(Type type, ...)
{
    // build the expression...
    ParameterExpression param = Expression.Parameter(typeof(Object), "m");
    Expression expression = null;

    UnaryExpression convert = Expression.Convert(param, type);

    // simplified version of building the expression tree
    MemberExpression member = Expression.Property(convert, filter.Property);
    ConstantExpression constant = Expression.Constant(filter.Value);
    expression = Expression.Equal(member, constant);

    // ...

    return Expression.Lambda<Func<object, bool>>(expression, param);
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM