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"); }