Синтаксис LINQ против синтаксиса SQL

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

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

13.10.2009 06:20:44
3 ОТВЕТА
РЕШЕНИЕ

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

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

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

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

20
13.10.2009 06:32:36

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

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

2
13.10.2009 06:24:51

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

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

5
13.10.2009 06:28:48