Я знаю, что это Linq:
var _Results = from item in _List
where item.Value == 1
select item;
И я знаю, что это лямбда:
var _Results = _List.Where(x => x.Value == 1);
Примечание редактора: это не просто Lambda, это Linq, использующий «синтаксис метода», предикатом которого является Lambda. Для ясности, оба приведенных выше примера являются Linq (мое исходное сообщение было неверным, но я оставил ошибку, чтобы проиллюстрировать путаницу, вызвавшую вопрос).
Но является ли Linq подмножеством Lambda или как?
Почему есть две, казалось бы, одинаковые техники?
Есть ли техническая причина выбирать одно вместо другого?
Ответы:
Это LINQ (с использованием синтаксиса запроса):
Это тоже LINQ (с использованием синтаксиса метода):
Интересно отметить, что обе эти разновидности в конечном итоге создадут один и тот же код. Компилятор предлагает вам услугу, позволяя вам выражать свои пожелания так, как вы предпочитаете.
А это лямбда:
Когда вы решаете использовать синтаксис метода, LINQ почти всегда встречается с лямбда-выражениями. Но LINQ и лямбды - это две совершенно разные вещи, которые можно использовать сами по себе.
Обновление: как справедливо указывает svick, LINQ с синтаксисом запроса также реализован с использованием лямбда-выражений (как упоминалось ранее, компилятор позволяет вам писать в синтаксисе запроса, но эффективно преобразует его в синтаксис метода за вашей спиной). Это просто нагромождение того факта, что оба варианта полностью эквивалентны и будут вести себя одинаково (например, лямбда-выражения могут вызывать создание замыканий ).
источник
Оба являются Linq. Второй использует лямбды .
Лямбды - это объекты типа встроенного метода, которые вы передаете в качестве параметра функции Where во втором примере.
Разница между этими двумя синтаксисами чисто синтаксическая. Второй стиль linq с использованием вызовов методов - это то, как он работает под капотом. Первый предназначен для более удобного / простого использования, и компилятор преобразует его в вызовы методов за кулисами. Они должны работать одинаково для любого заданного запроса, хотя, конечно, компилятор может выбрать несколько другую интерпретацию сложного запроса linq, чем при преобразовании в стиль метода.
Эта статья msdn также может быть интересна: синтаксис запроса LINQ против синтаксиса метода . Особое значение имеет: «В общем, мы рекомендуем синтаксис запроса, потому что он обычно проще и читабельнее; однако нет семантической разницы между синтаксисом метода и синтаксисом запроса».
источник