【问题标题】:Convert Expression<Func<T, T2, bool>> to Expression<Func<T2, bool>> by introducing a constant for T通过引入 T 的常量,将 Expression<Func<T, T2, bool>> 转换为 Expression<Func<T2, bool>>
【发布时间】:2010-07-01 21:05:20
【问题描述】:

我有一个Expression&lt;Func&lt;T, T2, bool&gt;&gt; 格式的表达式,我需要将第一个表达式中的T 替换为一个常量值,将其转换为Expression&lt;Func&lt;T2, bool&gt;&gt; 格式的表达式。

我需要将其保留为表达式,因此我不能只使用常量作为第一个参数来调用表达式。

我在这里查看了有关表达式树的其他问题,但我无法真正找到解决问题的方法。我怀疑我必须遍历表达式树来引入常量并删除一个参数,但我现在什至不知道从哪里开始。 :(

【问题讨论】:

    标签: c# expression-trees


    【解决方案1】:

    您可以使用Expression.Invoke 创建一个调用另一个的新 lambda 表达式:

    static Expression<Func<T2, bool>> PartialApply<T, T2>(Expression<Func<T, T2, bool>> expr, T c)
    {
        var param = Expression.Parameter(typeof(T2), null);
        return Expression.Lambda<Func<T2, bool>>(
            Expression.Invoke(expr, Expression.Constant(c), param), 
            param);
    }
    

    【讨论】:

    • 工作起来就像一个魅力,而且比走整个表达式三要容易得多。谢谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-01
    相关资源
    最近更新 更多