C# – Create Expression from Func


I have a Func<TCollection, T> in my code. I use it to select certain properties.

In a call to another method I need Expression<Func<TCollection, T>> as a parameter.

Is there any way to convert (or create from) Func<TCollection, T> to Expression<Func<TCollection, T>> ?


Best Solution

You can not recreate an expression based on a method since an expression needs to know the original statements, not IL. You can however create an Expresson which makes a method call to your func like:

Func<int> func = () => 1;
Expression<Func<int>> expression = Expression.Lambda<Func<int>>(Expression.Call(func.Method));

Note however that systems like EF can't really work with this