Есть ли что-нибудь, что возможно в LINQ, но не в Lambda? - PullRequest
4 голосов
/ 23 декабря 2011

Я думаю о стандартах кода для проекта .net (на диком языке) и лично мне очень нравится использовать лямбда-выражения в различных методах расширения IEnumerable и т. Д. (Где, GroupBy, бла, бла) и мне не очень нравитсясинтаксис LINQ.

Я знаю, что это вещь личных предпочтений, поэтому я не спрашиваю, что лучше, но для меня и моей команды мы склонны считать, что лямбда-подход более удобочитаем.Так что я думаю сказать в наших стандартах кодирования всегда использовать лямбда-подход, но я подумал ...

Есть ли что-нибудь, чего можно достичь только с помощью синтаксиса LINQ?Под чем-то я подразумеваю, что вы можете построить определенное дерево выражений с помощью LINQ, что вы просто не сможете использовать методы расширения с лямбда-выражениями.Я думаю, что ответ «нет», так как такие инструменты, как resharper и linqpad, могут конвертировать между ними, и я смог решить все, что мне когда-либо было нужно в лямбде, но мне интересно, есть ли где-нибудь крайний случай, на котором умные людитут знать про?

Ответы [ 3 ]

7 голосов
/ 23 декабря 2011

«Возможный» и «удобный» различны; p Все возможно; Синтаксис LINQ в конечном итоге компилируется в лямбда-синтаксис, и с синтаксисом расширения возможны некоторые вещи, которые невозможны в синтаксисе LINQ (например, Distinct() в C #, хотя он существует в VB.NET LINQ).

Однако! Когда в запросе LINQ имеется много переменных , это очень сложно отобразить, так как вам потребуется много дополнительных проекций для промежуточных объектов (возможно, анонимных типов); например, попробуйте написать (в лямбда-синтаксисе):

var query = from x in xSource
            from y in x.SomeCollection
            from z in zSource
            let foo = x.Foo + z.SomeMethod()
            order by foo
            select new {x,y,z,foo};

это возможно , но, честно говоря, PITA.

1 голос
/ 23 декабря 2011

Синтаксис выражения (from x in something ..) преобразуется компилятором в синтаксис метода расширения. И вы можете сделать больше с помощью методов расширения, чем в синтаксисе выражения (хотя последнее иногда может быть проще).

0 голосов
/ 23 декабря 2011

Выражения LINQ фактически скомпилированы как методы расширений, компилятор был обновлен, чтобы это можно было сделать, но под капотом есть IL, который вообще не знает об этом новом синтаксисе. Так что на самом деле все наоборот, есть вещи, которые вы можете делать с методами расширения, которые вы не можете сделать с Linq, не говоря уже о том, что вы можете легко создавать новые методы расширения для себя, которые вы не сможете вызывать из "Linq синтаксис "

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