Почему дизайнеры LINQ не придерживались способа использования sql?

Например, почему вы делаете это в LINQ

var products = from p in Products
               select p.Name;

когда они могли бы это сделать:

var products = select p.Name from Products p;

Предоставляет ли второе предложение некоторые ограничения в linq? Возможно, приведенные выше примеры слишком просты, чтобы понять, почему linq написан в одном порядке, а sql написан в другом.

Ответы

Ответ 1

Поскольку LINQ не является SQL. LINQ состоит из нескольких цепочечных методов расширения на IEnumerable<T> (при использовании пространства имен System.Linq). Синтаксис SQL как простой трюк компилятора для включения синтаксического сахара в цепочках таких методов запросов, поэтому кажется, что вы можете использовать запросы, похожие на SQL внутри языков .NET. LINQ в основном не имеет ничего общего с SQL...

Ответ 2

Поскольку для того, чтобы Intellisense в Visual Studio работал с LINQ, ему сначала нужно знать таблицы, чтобы редактор мог предложить программисту список столбцов на выбор. Если вы сделаете это методом SQL и сначала вы выберете столбцы, редактор не сможет вам помочь, так как он не знает, на какие таблицы смотреть.

Ответ 3

Оставляя в стороне IntelliSense, расширение выражений запроса и т.д. (которые все являются действительной причиной), я действительно считаю, что способ LINQ имеет гораздо больший смысл.

Вы начинаете с источника данных. Вы применяете фильтры, заказываете и т.д. Вы заканчиваете проекцией. Другими словами, запрос записывается в логическом порядке операций.

Иными словами, почему дизайнеры SQL решили упорядочить SQL-запросы таким образом?

Ответ 4

Intellisense часто упоминается как причина, но я думаю, что лучшее объяснение заключается в том, что Select логически происходит в конце процесса записи запроса. Сначала вы настраиваете свои источники данных, затем фильтруете и группируете, а затем, когда у вас есть все на своем месте, вы указываете, что хотите выйти.

Ответ 5

Часто упоминается, что причиной является Intellisense. Потому что, если вы начинаете писать

select p.

компилятор не может сказать, какие свойства показывать вам.

но если вы начинаете с

from person p select p.

он знает, как искать свойства объекта person.

НТН Алекс

Ответ 6

На самом деле, синтаксис LINQ более тесно основан на XQuery, чем на SQL, и XQuery тоже делает это.

Основные причины уже приведены: в С#, VB.NET и, действительно, большинстве языков программирования область видимости распространяется сверху вниз и слева направо, так же, как мы обычно читаем. Способ записи SQL, область скачков: идентификатор уже используется в части SELECT запроса, но он вводится позже, в части FROM запроса. Вот почему дизайнеры XQuery решили перевернуть его, и LINQ просто следует.

Он также лучше соответствует ментальной модели: у вас есть список источников данных (FROM), затем вы отфильтровываете интересующие вас данные (WHERE), затем сортируете эти данные (ORDERBY) и, наконец, вы либо проецируете его в другое представление (SELECT), либо разделите результаты (GROUP BY). После этого вы можете ввести результаты в следующий запрос (INTO).

Ответ 8

В то время как другие правильно заявили, что предоставление intellisense является частью причины, повлиявшей на решение Ander, что-то еще, что нужно учитывать, заключается в том, что LINQ не просто предназначен для использования с SQL. Поскольку это гораздо более всеобъемлющая технология, LINQ никогда не предназначался для того, чтобы быть ограниченным, чтобы просто работать так, как это делает SQL.