转换表达式<func <t,t2,=“”bool =“”>&gt;表达式<func <t2,bool =“”>&gt;通过为T </func <t2,> </func <t,>引入常量

时间:2010-07-01 12:49:01

标签: c# expression-trees

我有一个Expression<Func<T, T2, bool>>格式的表达式,我需要通过用常量值替换第一个表达式中的T来转换为Expression<Func<T2, bool>>格式的表达式。

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

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

1 个答案:

答案 0 :(得分:5)

您可以使用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);
}