The only difference is the lambda can be easily cast to Expression>
. The delegates are purely just methods/closures, but the lambda can also be broken down into an expression tree:
Expression> expr = x => x*2; // Expression tree
Func fun = x => x*2; // Function
delegate int MyDelegate(int x); // Delegate
MyDelegate del = x => x*2; // Same as Function and Delegate