我想在BinaryExpression中组合条件列表。问题是我希望所有条件都处于同一水平,即:
真==真和真= =假和真==真和真==真和真==真或真==假和真==真和真==真和真==真和真= =真和真==真或真==真
但表达式已生成:
(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((( ))或(True == False))和(True == True))和(True == True))和(True == True))和(True == True))和(True == True))或(True == True))
var currentExpr = this.MakeExpression(list.First());
foreach (bool obj in list.Skip(1))
{
var nextExpr = this.MakeExpression(obj);
switch (type)
{
case 1: // And
currentExpr = Expression.And(currentExpr, nextExpr);
break;
case 2: // Or
currentExpr = Expression.Or(currentExpr, nextExpr);
break;
}
}
private BinaryExpression MakeExpression(bool value)
{
BinaryExpression expression = Expression.Equal(Expression.Constant(true),Expression.Constant(value));
return expression;
}
答案 0 :(得分:0)
您可以通过自己延迟OR
来处理优先级:
var andExprs = new List<BinaryExpression>();
andExprs.Add(this.MakeExpression(list.First()));
foreach (bool obj in list.Skip(1))
{
var nextExpr = this.MakeExpression(obj);
switch (type)
{
case 1: // And
andExprs[andExprs.Count-1] = Expression.And(andExprs[andExprs.Count-1], nextExpr);
break;
case 2: // Or
andExprs.Add(nextExpr);
break;
}
}
var currentExpr = andExprs.First();
foreach (var expr in andExprs.Skip(1))
{
currentExpr = Expression.Or(currentExpr, expr);
}
我现在无法测试代码,因此可能存在拼写错误(andExprs.Count
需要andExprs.Count()
吗?)但是这应该会给你一般的想法。