I\'m generating an expression tree that maps properties from a source object to a destination object, that is then compiled to a Func
I think that's the impact of having Reflection at this point. The second method is using reflection to get and set the values. As far as I can see that at this point, it's not the delegate, but the reflection that costs its time.
About the third solution: Also Lambda Expressions need to be evaluated at runtime, which also costs its time. And that's not few...
So you'll never get the second and third solution as fast as the manual copying.
Have a look at my code samples here. Think that is propably the fasted solution you can take, if you don't want manual coding: http://jachman.wordpress.com/2006/08/22/2000-faster-using-dynamic-method-calls/