Это Линк или Лямбда?
Я знаю, что это 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 с 2D-массивом, Select not found
- Операция не может быть завершена, поскольку DbContext был удален с использованием MVC 4
- Правильный Linq, где пункты
- LINQ, Невозможно создать постоянное значение типа XXX. В этом контексте поддерживаются только примитивные типы или типы перечислений
- Как создать динамический метод расширения соединения LINQ
- Как получить дубликаты элементов из списка с помощью LINQ?
- LINQ to SQL с использованием GROUP BY и COUNT (DISTINCT)
- Почему IQueryable.All () возвращает true в пустой коллекции?
Это LINQ (с использованием синтаксиса запроса):
var _Results = from item in _List where item.Value == 1 select item;
Это также LINQ (с использованием синтаксиса метода):
var _Results = _List.Where(x => x.Value == 1);
Интересно отметить, что оба эти вкуса в конечном итоге производят тот же самый код. Компилятор предлагает вам услугу, позволяя вам выразить свои пожелания так, как вы предпочитаете.
И это lambda:
x => x.Value == 1
Когда вы решите использовать синтаксис метода, LINQ почти всегда встречается вокруг lambda-выражений. Но LINQ и lambdas – это две совершенно разные вещи, которые могут использоваться сами по себе.
Обновление. Как правильно указывает, LINQ с синтаксисом запросов также реализуется с использованием lambda-выражений (как упоминалось ранее, компилятор позволяет писать в синтаксисе запроса, но эффективно трансформирует его в синтаксис метода за вашей спиной). Это просто накапливается на том факте, что оба вкуса полностью эквивалентны и будут вести себя одинаково (например, lambda-выражения могут привести к созданию замыканий ).
Оба являются Linq. Второй использует Лямбда .
Lambdas – это встроенные типы методов, которые вы передаете как параметр функции Where во втором примере.
Разница между этими двумя синтаксисами является чисто синтаксической. Второй стиль linq с использованием вызовов методов – это то, как он работает под капотом. Первый призван быть более удобным для пользователя / проще, и компилятор преобразует его в вызовы методов за кулисами. Они должны работать одинаково для любого заданного запроса, хотя, конечно, компилятор может выбрать слабую интерпретацию сложного запроса linq, чем при преобразовании в стиль метода.
Этот файл msdn может также представлять интерес: LINQ Query Syntax и метод синтаксиса . Особое значение имеет следующее: «В целом мы рекомендуем синтаксис запроса, потому что он обычно проще и читабельнее, однако семантическая разница между синтаксисом метода и синтаксисом запроса не существует».