Beispiel #1
0
        public static void Show()
        {
            {
                Expression <Func <int, int, int> > exp = (x, y) => x * y + 2;

                // 此时需求更改,需要将 x*y + 2 变成 x*y -2, 首先需要解析上面的expression 需要用到ExpressionVisitor类
                OperationVisitor visitor = new OperationVisitor();

                Expression expNew = visitor.Modify(exp);
            }

            {
                Expression <Func <int, int, int> > exp1 = (m, n) => m * n + 2 + 3 + Get(m);
                OperationVisitor visitor = new OperationVisitor();

                Expression expNew = visitor.Modify(exp1);
            }

            {
                //用处

                {
                    var source = new List <People>().AsQueryable();

                    var result = source?.Where <People>(p => p.Age > 5); // Select * from People Where Age > 5

                    Expression <Func <People, bool> > lambda = x => x.Age > 5;

                    ConditionBuilderVisitor visitor = new ConditionBuilderVisitor();
                    visitor.Visit(lambda);
                    Console.WriteLine(visitor.Condition());
                }

                {
                    Expression <Func <People, bool> > lambda = x => x.Age > 5 &&
                                                               x.Id > 5 &&
                                                               x.Name.StartsWith("I") &&
                                                               x.Name.EndsWith("n") &&
                                                               x.Name.Contains("n");

                    var sql = string.Format("Delete from [{0}] where {1}", nameof(People), " [Age] > 5 AND [ID] > 5");

                    ConditionBuilderVisitor visitor = new ConditionBuilderVisitor();

                    visitor.Visit(lambda);
                    Console.WriteLine(visitor.Condition());
                }
            }
        }