IPredicateTreeBuilderNext IPredicateTreeBuilderNext.Or(Func <IPredicateTreeBuilderStart, IPredicateTreeBuilderNext> nestedPredicate) { var innerBuilder = new PredicateTreeBuilder(instanceType); nestedPredicate(innerBuilder); var innerNode = new ComplexNode(LogicalOperator.Or); innerNode.Nodes.Add(innerBuilder.RootNode); RootNode.Nodes.Add(innerNode); return(this); }
Expression INodeVisitor <Expression, ExpressionNodeVisitorInput> .VisitComplexNode(ComplexNode node, ExpressionNodeVisitorInput input) { Expression expression = null; foreach (var childNode in node.Nodes) { expression = expression == null ? childNode.Accept(this, input) : childNode.LogicalOperator == LogicalOperator.And ? ExpressionEx.AndAlso(expression, childNode.Accept(this, input)) : ExpressionEx.OrElse(expression, childNode.Accept(this, input)); } return(expression); }