Condividi tramite


How to: Execute Expression Trees (C# and Visual Basic)

This topic shows you how to execute an expression tree. Executing an expression tree may return a value, or it may just perform an action such as calling a method.

Only expression trees that represent lambda expressions can be executed. Expression trees that represent lambda expressions are of type LambdaExpression or Expression<TDelegate>. To execute these expression trees, call the Compile method to create an executable delegate, and then invoke the delegate.

Note

If the type of the delegate is not known, that is, the lambda expression is of type LambdaExpression and not Expression<TDelegate>, you must call the DynamicInvoke method on the delegate instead of invoking it directly.

If an expression tree does not represent a lambda expression, you can create a new lambda expression that has the original expression tree as its body, by calling the Lambda<TDelegate>(Expression, IEnumerable<ParameterExpression>) method. Then, you can execute the lambda expression as described earlier in this section.

Example

The following code example demonstrates how to execute an expression tree that represents raising a number to a power by creating a lambda expression and executing it. The result, which represents the number raised to the power, is displayed.

        ' The expression tree to execute. 
        Dim be As BinaryExpression = Expression.Power(Expression.Constant(2.0R), Expression.Constant(3.0R))

        ' Create a lambda expression. 
        Dim le As Expression(Of Func(Of Double)) = Expression.Lambda(Of Func(Of Double))(be)

        ' Compile the lambda expression. 
        Dim compiledExpression As Func(Of Double) = le.Compile()

        ' Execute the lambda expression. 
        Dim result As Double = compiledExpression()

        ' Display the result.
        MsgBox(result)

        ' This code produces the following output: 
        ' 8
// The expression tree to execute.
            BinaryExpression be = Expression.Power(Expression.Constant(2D), Expression.Constant(3D));

            // Create a lambda expression.
            Expression<Func<double>> le = Expression.Lambda<Func<double>>(be);

            // Compile the lambda expression.
            Func<double> compiledExpression = le.Compile();

            // Execute the lambda expression. 
            double result = compiledExpression();

            // Display the result.
            Console.WriteLine(result);

            // This code produces the following output: 
            // 8

Compiling the Code

  • Add a project reference to System.Core.dll if it is not already referenced.

  • Include the System.Linq.Expressions namespace.

See Also

Tasks

How to: Modify Expression Trees (C# and Visual Basic)

Concepts

Expression Trees (C# and Visual Basic)