Сами лямбда-выражения существуют только в исходном коде. У них самих нет типа, поэтому компилятор всегда настаивает на том, что они конвертируются в определенный тип.
Вот почему этот код не компилируется:
// No idea what type to convert to!
object x = y => y.Length;
Но это так:
Func<string, int> x = y => y.Length;
Лямбда-выражения всегда преобразуются в или тип делегата или тип дерева выражений. Точно так же анонимные методы всегда преобразуются в тип делегата.