Exemplo n.º 1
0
        public void ExpressionParserTest()
        {
            var p           = Expression.Parameter(typeof(Employee));
            var methodInfo  = typeof(Employee).GetMethod("get_Item");
            var body        = Expression.Call(p, methodInfo, new[] { Expression.Constant("ReportsTo") });
            var p_ReportsTo = Expression.Lambda(body, p);

            var source = (IQueryable)db.Employees;
            var q1     = source.Provider.CreateQuery(Expression.Call(typeof(Queryable), "Select",
                                                                     new[] { source.ElementType, typeof(object) },
                                                                     source.Expression, Expression.Quote(p_ReportsTo)));

            Console.WriteLine(db.GetCommand(q1).CommandText);
            Console.WriteLine();

            Expression <Func <Employee, object> > exp0 = o => o["ReportsTo"];
            var q = db.Employees.Select(exp0);

            Console.WriteLine(db.GetCommand(q).CommandText);
            Console.WriteLine();

            Expression <Func <Employee, object> > exp5 = o => new { o.FirstName, ReportsTo = o["ReportsTo"] };

            q = db.Employees.Select(exp5);
            Console.WriteLine(db.GetCommand(q).CommandText);
            Console.WriteLine();

            var items = db.Employees.Select("FirstName").Cast <string>()
                        .ToArray();

            //var parser = new ExpressionParser(new[] { Expression.Parameter(typeof(Employee)) },
            //                                  "FirstName", new object[] { });

            //var exp = parser.Parse();
            //Expression<Func<Employee, string>> exp1 = o => o.FirstName;

            //var exp2 = ExpressionParser.Parse<Employee>("FirstName");
            //var exp3 = ExpressionParser.Parse<Employee>("new (FirstName + LastName as Name)");
            //var exp4 = ExpressionParser.Parse<Employee>("FirstName + LastName");
        }