In the example below, the same lambda can be hold as an Expression in test but it fails to compile when it comes form a Func:
Func<int> func = () => 2;
Expression test1 = (Expression<Func<int>>)(() => 2);
Expression test2 = (Expression<Func<int>>)(func); //does not compile
Why a lambda can be converted to an Expression directly, but not when it is represented as a Func?
 
    