2009-10-13 2 views
3

Почему Андрес Хейлсберг разработал синтаксис LINQ, отличный от SQL, и, таким образом, накладные расходы для программистов, чтобы узнать совершенно новое?Синтаксис LINQ против синтаксиса SQL

Не было ли лучше, если бы он использовал тот же синтаксис, что и для SQL?

ответ

21

LINQ не должен быть SQL. Это означает, что язык запросов, который является настолько независимым от источника данных, насколько это возможно. Теперь, по общему признанию, он имеет сильное смещение SQL, но это не значит просто встраивать SQL в исходный код (к счастью).

Лично я значительно предпочитает синтаксис LINQ для SQL. В частности, упорядочение в LINQ намного логичнее. Просто взглянув на порядок предложений запроса, вы можете увидеть логический порядок, в котором обрабатывается запрос. Вы начинаете с источника данных, возможно, выполняете некоторую фильтрацию, упорядочиваете и т. Д. И обычно заканчиваете проекцией или группировкой. Сравните это с SQL, где вы начинаете говорить, какие столбцы вам интересны, даже не зная, о какой таблице вы говорите.

LINQ более логичен в этом отношении, но он позволяет инструментам работать с вами лучше - если Visual Studio знает, с каких данных вы начинаете, тогда, когда вы начинаете писать предложение select (например), оно может помочь вам с IntelliSense. Кроме того, это позволяет сделать перевод из выражений запроса LINQ в «точечную нотацию» относительно простым с использованием методов расширения, не имея компилятора, чтобы знать о каких-либо деталях того, что будет делать запрос.

Итак, с моей точки зрения: нет, LINQ будет много хуже, если бы он был рабски следовали синтаксису SQL.

2

Проще всего разобрать выражение, когда начальные данные предоставлены в его начале.

Из-за этого VS обеспечивает завершение кода даже для частично написанных запросов LINQ (отличная функция IMO).

5

Во-первых, выберите свой аромат SQL - их несколько! (T-, PL- и т. Д.).

В конечном счете, есть сходства и различия. Многие изменения в LINQ вызывают more sense - т. Е. Выбирая источник (FROM), прежде чем пытаться фильтровать (WHERE)/проекции (SELECT), что позволяет улучшить статический анализ и т. Д. (Включая intellisense) и более естественный синтаксис понимания запроса. Это помогает как разработчику, так и компилятору, поэтому я счастлив.

Смежные вопросы