public bool CheckCondition(model.ConditionNode condition, DataScope dataScope) { if (condition == null) { return(true); } if (condition is model.LogicalNode) { model.LogicalNode logicalNode = (model.LogicalNode)condition; bool?aggregateResult = null; foreach (model.ConditionNode node in logicalNode.Nodes) { bool nodeResult = CheckCondition(node, dataScope); if (aggregateResult == null) { aggregateResult = nodeResult; continue; } if (logicalNode.ConditionalOperator == model.Conditional.And) { aggregateResult = aggregateResult.Value && nodeResult; if (!aggregateResult.Value) { break; } } else if (logicalNode.ConditionalOperator == model.Conditional.Or) { aggregateResult = aggregateResult.Value || nodeResult; } else { throw new NotSupportedException(); } } return(aggregateResult.Value); } else { model.ExpressionNode expressionNode = (model.ExpressionNode)condition; IExpressionEvaluator evaluator = ExpressionEvaluatorFactory.GetExpressionEvaulator(expressionNode.DataType); return(evaluator.EvaulateExpression(expressionNode, dataScope)); } }