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

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

96 голосов
/ 12 сентября 2011

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

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

И я знаю, что это Lambda:

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

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

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

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

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

Ответы [ 2 ]

124 голосов
/ 12 сентября 2011

Это 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 с синтаксисом запроса также реализован с использованием лямбда-выражений (как упоминалось ранее, компилятор позволяет писать в синтаксисе запроса, но эффективно преобразует его в синтаксис метода за вашей спиной).Это просто накапливает тот факт, что оба варианта полностью эквивалентны и будут вести себя одинаково (например, лямбда-выражения могут привести к созданию замыканий ).

33 голосов
/ 12 сентября 2011

Оба Линк.Вторым является с использованием Lambdas .

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...