I haven’t found any information on MSDN regarding this problem.
If we create an Expression<Func<T>> and call Compile() on it does CLR cache compiled results, so any subsequent calls of Compile() on the same expression wouldn’t have much impact because CLR would return previously compiled Func<T> from internal memory cache?
AFAIK lambda expressions are immutable, so internal caching would actually make sense.
No, it simply returns a delegate to the compiled version. The expression itself is not affected.