Деревья выражений C#

Что такое деревья-выражений и как они представлены в языке C#?

Дерево выражений это своего рода структура, которая представляет собой дерево из нод, каждая из которых является выражением. С помощью дерева выражений можно динамически изменять выполняемый код, создавать динамические запросы и выполнять LINQ запросы в разные базы данных.

Вот пример кода дерева выражений:

namespace Main
{
    using System;
    using System.Linq.Expressions;
public class Program
{
    public static void Main()
    {
        ParameterExpression parameter1 = Expression.Parameter(typeof(int), "parameter1");
        ParameterExpression parameter2 = Expression.Parameter(typeof(int), "parameter2");

        var c1 = Expression.Constant(5);
        var c2 = Expression.Constant(4);

        var first = Expression.Add(parameter1, c1);
        var second = Expression.Add(first, c2);
        var third = Expression.Multiply(second, parameter2);

        var expression = Expression.Lambda<Func<int, int, int>>(third, parameter1, parameter2);

        Func<int, int, int> func = expression.Compile();
        
        Console.WriteLine(func(10, 25));
        Console.ReadKey();
    }

}

}