我有一个Expression<Func<T, T2, bool>>
格式的表达式,我需要通过用常量值替换第一个表达式中的T来转换为Expression<Func<T2, bool>>
格式的表达式。
我需要将它作为表达式保留,因此我不能只使用常量作为第一个参数调用表达式。
我在这里看了关于表达树的其他问题,但我无法找到解决问题的方法。我怀疑我必须走表达式树来引入常量并删除一个参数,但我甚至不知道从哪里开始。 :(
答案 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);
}