Part 4 of the series: binding variables by name with anonymous objects, and compiling an expression once to evaluate it with different values.
Part 3 of the series: adding support for variables to the C# expression evaluator with Expression.Parameter and compiled lambdas.
Part 2 of the series: rewriting the C# expression evaluator with the shunting-yard algorithm and adding support for parentheses.
Table of contents for a four-part series on building a mathematical expression evaluator in C# with expression trees.