繁体   English   中英

表达<Func<TEntity, int, bool> 设置 int 值

[英]Expression<Func<TEntity, int, bool> set the int value

我有这个表达

 public Expression<Func<TEntity, int, bool>> FilterExpr

现在我想消除/插入 int 值的值

喜欢

int i = 12;
//Pseudo Code which sets the value of the second Parameter
FilterExpr.Arg2 = i;

结果应该是

Expression<Func<TEntity, bool>>

没有 int 参数

谢谢

您可以通过替换正文中的参数并使用一个参数创建新的 lambda 表达式来创建新表达式。 例如使用这个替换器(或者如果您使用的是 EF Core 3.0+,则使用ReplacingExpressionVisitor ):

public static class ExpressionExt
{
    public static Expression ReplaceParameter(this Expression expression, ParameterExpression source, Expression target)
    {
        return new ParameterReplacingVisitor { Source = source, Target = target }.Visit(expression);
    }

    class ParameterReplacingVisitor : ExpressionVisitor
    {
        public ParameterExpression Source;
        public Expression Target;
        protected override Expression VisitParameter(ParameterExpression node)
        {
            return node == Source ? Target : base.VisitParameter(node);
        }
    }
}

并修改表达式:

var withReplaced = FilterExpr.Body.ReplaceParameter(
    FilterExpr.Parameters[1], // replace second parameter 
    Expression.Constant(42)); // with some constant
// build new expression with only one parameter by reusing first parameter of original one
var result = Expression.Lambda<Func<MyClass, bool>>(withReplaced, FilterExpr.Parameters[0]);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM