如何在.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。我该怎么合并两个表达式?
试试这个:
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);
再看一下这个