![](/img/trans.png)
[英]How to make dynamic C# expression func<tentity, bool> for nullable properties like Nullable<Int32>
[英]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.