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

我有一个Expression<Func>格式的Expression<Func> ,我需要通过将第一个表达式中的T替换为Expression<Func>的格式转换为表达式恒定价值。

我需要这个作为表达式保留,所以我不能只用一个常量作为第一个参数来调用表达式。

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

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

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