Это Линк или Лямбда?

Я знаю, что это Linq:

var _Results = from item in _List
                where item.Value == 1
                select item;

И я знаю, что это Лямбда:

var _Results = _List.Where(x => x.Value == 1);

Примечание редактора: выше не только Lambda, это Linq, используя "Метод Синтаксис", предикатом которого является лямбда. Чтобы быть ясным, оба вышеупомянутых образцы Linq (мой исходный пост был неправильным, но я оставил ошибку чтобы проиллюстрировать путаницу, вызвав вопрос).

Но является ли Linq подмножество Lambda или что?

Почему есть два, казалось бы, одинаковых технаря?

Есть ли техническая причина выбора одного над другим?

Ответ 1

Это LINQ (с использованием синтаксиса запроса):

var _Results = from item in _List
                where item.Value == 1
                select item;

Это также LINQ (с использованием синтаксиса метода):

var _Results = _List.Where(x => x.Value == 1);

Интересно отметить, что оба эти вкуса в конечном итоге производят тот же самый код. Компилятор предлагает вам услугу, позволяя вам выразить свои пожелания так, как вы предпочитаете.

И этот - лямбда:

x => x.Value == 1

Когда вы решите использовать синтаксис метода, LINQ почти всегда встречается вокруг лямбда-выражений. Но LINQ и lambdas - две совершенно разные вещи, которые могут быть использованы сами по себе.

Обновление:. Как видно из строки, LINQ с синтаксисом запроса также реализуется с использованием лямбда-выражений (как уже упоминалось ранее, компилятор позволяет писать в синтаксисе запроса, но эффективно преобразует его в синтаксис метода позади ваша спина). Это просто наложение на то, что оба вкуса полностью эквивалентны и будут вести себя одинаково (например, лямбда-выражения могут вызывать closures).

Ответ 2

Оба являются Linq. Второй использует Lambdas.

Lambdas - это тип встроенного метода, который вы передаете как параметр функции Where во втором примере.

Различие между этими двумя синтаксисами является чисто синтаксическим. Второй стиль linq с использованием вызовов методов - это то, как он работает под капотом. Первый призван быть более удобным для пользователя/проще, и компилятор преобразует его в вызовы методов за кулисами. Они должны работать одинаково для любого заданного запроса, хотя, конечно, компилятор может выбрать слабую интерпретацию сложного запроса linq, чем при преобразовании в стиль метода.

Эта статья msdn может также представлять интерес: Синтаксис запроса LINQ и синтаксис метода. Особое значение имеет следующее: "В общем, мы рекомендуем синтаксис запроса, потому что он обычно проще и читабельнее, однако не существует семантической разницы между синтаксисом метода и синтаксисом запроса".