如何在CodeDOM中构建复合条件以执行规则

时间:2012-04-04 05:16:58

标签: .net validation codedom

我正在尝试使用自定义UI构建规则,并使用CodeDom为我的工作流模块执行。我不想使用WF提供的Rules接口。为了构建/执行规则,我创建了一个Condition和ThenAction / ElseActions。目前我能够成功执行一个条件。意味着假设订单实体具有 OrderID,Amount,NoOfItems,Discount和TotalAmount等属性。

能够建立以下条件:

if (this.Amount > 1000)
    thisDiscount = 100;

建立左/右条件:

CodePropertyReferenceExpression technologyRef = new CodePropertyReferenceExpression(thisRef, " Amount");

CodePrimitiveExpression wfConstant = new CodePrimitiveExpression(1000);

// if ( this. Amount > 1000)

CodeBinaryOperatorExpression cond = new CodeBinaryOperatorExpression();

cond.Left = technologyRef;

cond.Operator = CodeBinaryOperatorType.GreaterThanOrEqual;

cond.Right = wfConstant;

Rule rule = new Rule("rule1");

rule.Condition = new RuleExpressionCondition(cond);

无法构建以下条件:

if (this.Amount > 1000 && NoOfItems > 5)
    thisDiscount = 150;

有人可以帮助我为规则建立多个条件吗?  表示在单个IF语句中对多个属性进行验证。

1 个答案:

答案 0 :(得分:1)

第一个条件的树看起来像这样:

      <
     / \
Amount  1000

这正是您在代码中表达的方式:CodeBinaryOperatorExpression一个<,然后是每个孩子的表达式。对第二个表达式执行相同操作几乎相同,但树将更大:

        -----&&-----
       /            \
      <              >
     / \            / \
Amount 1000 NoOfItems  5

也就是说,您将有一个CodeBinaryOperatorExpression代表&&CodeBinaryOperatorType.BooleanAnd),其左子节点将是<节点,其右子节点将是>节点。