While researching for I've found that there are some low hanging fruit that can be addressed in the short term for the performance of the Linq component before considering caching, the most significant being using Expression.Lambda(node).Compile().DynamicInvoke() to evaluate closures (wrapped constant expressions).
The solution would be to use the FieldInfo or PropertyInfo to get the value: