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)); }
public void TestDynamicProjection() { var data = new List <Model> { new Model() { Id = 1, Name = "Name1" }, new Model() { Id = 2, Name = "Name2" }, new Model() { Id = 3, Name = "Name3" }, }; var dp = new ProjectionBuilder(typeof(Model), null) .Auto("Active") .Member("Id", map => map .FromExpression("Id")) .Member("Descr", map => map .FromExpression("Name")) .Member("CodeDescr", map => map .FromExpression("Id.ToString() + \" - \" + Name")) .Member("Constant", map => map .FromValue(5)) .BuildWithDynamicType("DynamicProjectionTestDto"); var predicateTreeBuilder = new PredicateTreeBuilder(typeof(Model)) .Has("Id", ExpressionOperator.Equals, 1) .Or("CodeDescr", ExpressionOperator.IsNotNullOrEmpty, null) .Or("Descr.Length", ExpressionOperator.GreaterThan, 1) .Or("Active", ExpressionOperator.DoesNotEqual, false); var q = dp.BuildQuery( data.AsQueryable(), new[] { "Id", "Descr" }, predicateTreeBuilder.RootNode) .ToList(); }