The code->AST is done of course at compile time (there is no reason to delay), but I believe the expression tree itself is processed by linq at runtime. You can build expressions programmatically at runtime as well (and then ask the runtime to optmize them to bytecode). I remember doing it years ago, it was surprisingly simple (and very powerful).