LINQ - это одно из величайших улучшений .NET, так как оно дженериков и экономит массу времени и строк кода. Однако свободный синтаксис кажется мне гораздо более естественным, чем синтаксис выражения запроса.
var title = entries.Where(e => e.Approved)
.OrderBy(e => e.Rating).Select(e => e.Title)
.FirstOrDefault();
var query = (from e in entries
where e.Approved
orderby e.Rating
select e.Title).FirstOrDefault();
Есть ли разница между этими двумя или есть какое-то конкретное преимущество одного над другим?
Ответы:
Ни то, ни другое лучше: они служат различным потребностям. Синтаксис запроса вступает в свои права, когда вы хотите использовать несколько переменных диапазона . Это происходит в трех ситуациях:
Вот пример (из примеров LINQPad):
Теперь сравните это с синтаксисом метода:
Синтаксис метода, с другой стороны, предоставляет полную гамму операторов запросов и более лаконичен с простыми запросами. Вы можете получить лучшее из обоих миров, смешав синтаксис запроса и метода. Это часто делается в запросах LINQ to SQL:
источник
Я предпочитаю использовать последний (иногда называемый «синтаксис понимания запроса»), когда я могу написать все выражение таким образом.
Как только я должен добавить (скобки) и
.MethodCalls()
я меняю.Когда я использую первое, я обычно помещаю одно предложение в строку, например так:
Я считаю, что это немного легче читать.
источник
У каждого стиля есть свои плюсы и минусы. Синтаксис запроса более приятен, когда речь идет о соединениях, и имеет полезное ключевое слово let, которое облегчает создание временных переменных внутри запроса.
Свободный синтаксис, с другой стороны, имеет гораздо больше методов и операций, которые не отображаются в синтаксисе запроса. Кроме того, поскольку они являются просто методами расширения, вы можете написать свой собственный.
Я обнаружил, что каждый раз, когда я начинаю писать оператор LINQ с использованием синтаксиса запроса, мне приходится заключать его в скобки и возвращаться к использованию беглых методов расширения LINQ. Синтаксис запроса просто не имеет достаточно функций для использования сам по себе.
источник
В VB.NET я очень предпочитаю синтаксис запросов.
Ненавижу повторять уродливое
Function
ключевое слово:Этот аккуратный запрос, на мой взгляд, гораздо более читабелен и понятен:
Синтаксис запросов в VB.NET также более мощный и менее подробный, чем в C #: https://stackoverflow.com/a/6515130/284240
Например, этот запрос LINQ to DataSet (Objects)
VB.NET:
C #:
источник
Я не понимаю синтаксис запроса вообще. У меня просто нет причин для этого. let может быть достигнут с .Select и анонимными типами. Я просто думаю, что все выглядит намного более организованным с «пунктуацией».
источник
Свободный интерфейс, если есть только где. Если мне нужно выбрать или заказать, я обычно использую синтаксис запроса.
источник
Свободный синтаксис действительно кажется более мощным, он также должен работать лучше для организации кода в небольшие многократно используемые методы.
источник
Я знаю, что этот вопрос помечен C #, но синтаксис Fluent мучительно многословен с VB.NET.
источник
Мне действительно нравится синтаксис Fluent, и я стараюсь использовать его там, где могу, но в некоторых случаях, например, когда я использую объединения, я обычно предпочитаю синтаксис запроса, в таких случаях мне легче читать, и я думаю, что некоторые люди Query (SQL-подобный) синтаксис более знаком, чем лямбды.
источник
Несмотря на то, что я понимаю и мне нравится свободный формат, я пока придерживался Query для удобства чтения. Люди, только знакомящиеся с LINQ, найдут Query намного удобнее для чтения.
источник
Я предпочитаю синтаксис запроса, поскольку я пришел из традиционного веб-программирования с использованием SQL. Мне намного легче обернуть голову. Тем не менее, я думаю, что я начну использовать .Where (лямбда), поскольку он определенно намного короче.
источник
Я использую Linq около 6 месяцев. Когда я впервые начал использовать его, я предпочел синтаксис запроса, так как он очень похож на T-SQL.
Но теперь я постепенно перехожу к первому, так как легко написать повторно используемые куски кода в качестве методов расширения и просто связать их вместе. Хотя я считаю, что размещение каждого предложения в отдельной строке очень помогает с удобочитаемостью.
источник
Я только что установил стандарты нашей компании, и мы применяем методы расширения. Я думаю, что это хорошая идея, чтобы выбрать один из других, а не смешивать их в коде. Методы расширения читать больше, как и другой код.
Синтаксис понимания не имеет всех операторов и использует круглые скобки вокруг запроса и добавляет методы расширения, в конце концов, просто просит меня использовать методы расширения с самого начала.
Но по большей части это всего лишь личные предпочтения с несколькими исключениями.
источник