示例#1
0
        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));
        }
示例#2
0
        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();
        }