public void TestPredicateTree() { var builder = new PredicateTreeBuilder(typeof(Dto)); builder.Has("Id", ExpressionOperator.Equals, 1) .And("Name", ExpressionOperator.IsNotNullOrEmpty, null) .And(inner => inner .Has("Birthdate.Year", ExpressionOperator.LessThanOrEqual, 2000) .Or("TimeSince.Hours", ExpressionOperator.GreaterThan, 1)) .Or("Active", ExpressionOperator.DoesNotEqual, false); var e = new ExpressionNodeVisitor().VisitLambda <Dto>( builder.RootNode, new PredicateBuilderConfiguration() .WithItParameterName("x") ); Expression <Func <Dto, bool> > testExpression = (Dto x) => ((x.Id == 1 && !(x.Name == "" || x.Name == null)) && (x.Birthdate.Year <= 2000 || x.TimeSince.Hours > 1)) || x.Active != true; Assert.AreEqual( testExpression.ToString(), e.ToString()); Assert.True(testExpression.CheckEquals(e)); }
protected internal virtual ExpressionNode VisitChildren(ExpressionNodeVisitor visitor) { return(this); }
protected internal virtual ExpressionNode Accept(ExpressionNodeVisitor visitor) { return(visitor.VisitExtension(this)); }
protected internal virtual ExpressionNode VisitChildren(ExpressionNodeVisitor visitor) { return this; }
protected internal virtual ExpressionNode Accept(ExpressionNodeVisitor visitor) { return visitor.VisitExtension(this); }