Лямбда-выражение, проще говоря, повторно используемое выражение, которое принимает ряд аргументов:
x => x + 1;
Вышеприведенное выражение гласит «для данного x, вернуть x + 1».
В .NET это мощно, потому что его можно скомпилировать в анонимный делегат, безымянную функцию, которую вы можете объявить inline с вашим кодом и оценить для получения значения:
int number = 100;
Func<int, int> increment = x => x + 1;
number = increment(number); // Calls the delegate expression above.
Однако реальная сила лямбда-выражения заключается в том, что его можно использовать для инициализации представления самого выражения в памяти.
Expression<Func<int, int>> incrementExpression = x => x + 1;
Это означает, что вы можете присвоить это выражение чему-то вроде LINQ to SQL, и оно сможет понять, что означает выражение , переведя его в оператор SQL, имеющий то же значение. Именно здесь лямбды сильно отличаются от обычных методов и делегатов, и обычно здесь начинается путаница.