Aller au contenu

Arbres d’expressions

Contexte : Les arbres d’expressions représentent les expressions lambda sous forme de structures de données (arbres syntaxiques abstraits). Ils sont utilisés pour analyser, modifier ou traduire des lambdas (par exemple en SQL).

using System.Linq.Expressions;
Expression<Func<int, int>> expr = x => x * 2;
Console.WriteLine(expr); // x => (x * 2)
// Compilation et invocation
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);

Traduction de requêtes ORM : Entity Framework Core convertit les requêtes LINQ (arbres d’expressions) en SQL.

Exemple : Documentation EF Core sur les requêtes utilise les arbres d’expressions pour traduire Where(x => x.Id == 1) en WHERE [Id] = 1.