通过为T引入一个常量,将表达式<Func <T,T2,bool >>转换为Expression <Func <T2,bool >>

Kri*_*r L 6 c# expression-trees

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

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

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

Qua*_*ter 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);
}
Run Code Online (Sandbox Code Playgroud)