如何在.net核心中合并表达式

本文关键字:合并 表达式 核心 net | 更新日期: 2023-09-27 18:13:19

在将项目更新到。net core(从完整的。net)之前,我使用了类似的东西,在两个表达式之间做和操作:

public class ExpressionBuilder<T>
{
    private Expression<Func<T, bool>> _mainExpression;
    public ExpressionBuilder()
    {
        _mainExpression = e => true;
    }
    public void AddExpression(Expression<Func<T, bool>> expression)
    {
        _mainExpression = _mainExpression.And(expression);
    }
    public Expression<Func<T, bool>> Build()
    {
        return _mainExpression;
    }
}

现在变量_mainExpression没有实现方法And。我该怎么合并两个表达式?

如何在.net核心中合并表达式

试试这个:

            Expression<Func<string, bool>> exp = x => x.Contains("b");
            Expression<Func<string, bool>> exp2 = x => x.Contains("a");
            ParameterExpression param = exp.Parameters[0];
            Expression<Func<string, bool>> accumulator = Expression.Lambda<Func<string, bool>>(Expression.AndAlso(exp.Body, Expression.Invoke(exp2, param)), param);
            var flag = accumulator.Compile()("ab");
            Console.WriteLine(flag);

再看一下这个