我有这个表情

 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参数

thx公司

推荐答案

可以通过替换主体中的参数并使用一个参数创建新的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]);

Csharp相关问答推荐

c#处理大量tcp连接

Mstest + Coverlet在收件箱中没有达到100%的覆盖率,但我在Codecov中得到了100%的覆盖率

如果没有中间变量,可空引用类型将无法工作

ASP.NET Core将SON重新序列化为派生类

如何将字节数组转换为字符串并返回?

找不到网址:https://localhost:7002/Category/Add?区域= Admin.为什么我的URL是这样生成的?area = Admin而不是/Admin/

如何分配对象后的class的属性?

.NET 8 Web-API返回空列表

从.Net 6 DLL注册和检索COM对象(Typelib导出:类型库未注册.(异常来自HRESULT:0x80131165))

C#中浮点数的System.Text.Json序列化问题

GODOT 4向C#中的字符串参数发送信号以等待

在C#ASP.NET内核中使用INT AS-1进行控制器场景的单元测试

发布.NET 8 Blazor WebAssembly独立应用程序以进行静态站点部署

EF Core 7-忽略模型绑定中的虚拟属性

C#如何获取字符串中引号之间的文本?

如何在C#中从MongoDB IPipelineStageDefinition中获取聚合命令的字段/选项?

忽略Visual Studio代码中的StyleCop规则

在C#/ASP.NET Core 7中,什么可能导致POST请求作为GET请求发送

SharpZipLib在文件名前加上目录名,生成tar.gz

Cmd中的&ping.end()";有时会失败,而";ping";总是有效