Skip to content

Expression trees

Context: Expression trees represent lambda expressions as data structures (abstract syntax trees). They are used to analyze, modify, or translate lambdas (e.g., to SQL).

using System.Linq.Expressions;
Expression<Func<int, int>> expr = x => x * 2;
Console.WriteLine(expr); // x => (x * 2)
// Compile and invoke
Func<int, int> compiled = expr.Compile();
Console.WriteLine(compiled(5)); // 10
var body = expr.Body as BinaryExpression;
Console.WriteLine(body.NodeType); // Multiply
ParameterExpression param = Expression.Parameter(typeof(int), "x");
ConstantExpression constant = Expression.Constant(2);
BinaryExpression multiply = Expression.Multiply(param, constant);
Expression<Func<int, int>> expr2 = Expression.Lambda<Func<int, int>>(multiply, param);

ORM query translation: Entity Framework Core converts LINQ queries (expression trees) to SQL.

Example: EF Core Querying uses expression trees to translate Where(x => x.Id == 1) into WHERE [Id] = 1.