private void Test1()
        {
            Expression <Func <People, Boolean> > where = p => (p.Amount > 4000 || p.Amount < 4500) && p.Name.Length > 2;
            ExpressionReplaceType <People, Teacher> replace = new ExpressionReplaceType <People, Teacher>();
            var newWhere = replace.ReplaceBodyType(where) as Expression <Func <Teacher, Boolean> >;

            WriteLine(new ParsingExpressionTrees().ParsingExpression(newWhere));
            foreach (Teacher item in teachers.Where(newWhere.Compile()))
            {
                WriteLine("Teacher:Name【{0}】,Amount【{1}】", item.Name, item.Amount);
            }
        }
        private void Test2()
        {
            var Parsing = new ParsingExpressionTrees();

            Expression <Func <People, Student, Boolean> > where = (p, s) => (p.Amount > 4000 || s.Amount < 400) && p.Name.Length > 3 && s.Name.Length > 2;
            ExpressionReplaceType <Student, Teacher> replace1 = new ExpressionReplaceType <Student, Teacher>();
            var newWhere1 = replace1.ReplaceBodyType(where) as Expression <Func <People, Teacher, Boolean> >;
            var lambda1   = newWhere1.Compile();

            WriteLine(Parsing.ParsingExpression(newWhere1));
            ExpressionReplaceType <People, Teacher> replace2 = new ExpressionReplaceType <People, Teacher>();
            var newWhere2 = replace2.ReplaceBodyType(newWhere1) as Expression <Func <Teacher, Teacher, Boolean> >;
            var lambda2   = newWhere2.Compile();

            WriteLine(Parsing.ParsingExpression(newWhere2));
        }