What does Lambda Exprresion Compile() method do?
I am trying to understand AST in C#. I wonder, what exactly `Compile()` method from this example do.

    // Some code skipped    
    Expression<Func<string, int, int, string>> data = Expression.Lambda<Func<string, int, int, string>>( 
            Expression.Call(s, typeof(string).GetMethod(“Substring”, new Type[] { typeof(int), typeof(int) }), a, b), 
            s, a, b 
        ); 
    Func<string, int, int, string> fun = data.Compile(); 


To prevent misunderstood, I understand the `Expression.Lambda` and `Expression.Call` constructs. What interests me is the `Compile()` method. Does it somehow produce real bytecode? Can I see the bytecode?
What does Lambda Exprresion Compile() method do?
===

I am trying to understand AST in C#. I wonder, what exactly `Compile()` method from this example do.

    // Some code skipped    
    Expression<Func<string, int, int, string>> data = Expression.Lambda<Func<string, int, int, string>>( 
            Expression.Call(s, typeof(string).GetMethod(“Substring”, new Type[] { typeof(int), typeof(int) }), a, b), 
            s, a, b 
        ); 
    Func<string, int, int, string> fun = data.Compile(); 


To prevent misunderstood, I understand the `Expression.Lambda` and `Expression.Call` constructs. What interests me is the `Compile()` method. Does it somehow produce real bytecode? Can I see the bytecode?