То, почему разработчики LINQ не придерживались использования пути sql, записано сегодня?

Проверьте утилиту выполняющего мертвую петлю летчика от проект Tempita. Это дает Вам интерфейсный объект вокруг объекта цикла, который обеспечивает свойства такой, поскольку предыдущий, затем, во-первых, продержитесь и т.д.

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

Пример:

> easy_install Tempita
> python
>>> from tempita import looper
>>> for loop, i in looper([1, 2, 3]):
...     print loop.previous, loop.item, loop.index, loop.next, loop.first, loop.last, loop.length, loop.odd, loop.even
... 
None 1 0 2 True False 3 True 0
1 2 1 3 False False 3 False 1
2 3 2 None False True 3 True 0

14
задан Xaisoft 2 October 2009 в 12:00
поделиться

8 ответов

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

26
ответ дан 1 December 2019 в 05:49
поделиться

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

25
ответ дан 1 December 2019 в 05:49
поделиться

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

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

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

19
ответ дан 1 December 2019 в 05:49
поделиться

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

5
ответ дан 1 December 2019 в 05:49
поделиться

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

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

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

4
ответ дан 1 December 2019 в 05:49
поделиться

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

select p.

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

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

from person p select p.

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

HTH Алекс

4
ответ дан 1 December 2019 в 05:49
поделиться

Расширение того, что сказал peSHIr.

LINQ основан на математических принципах лямбда-исчисления.

] Вам необходимо изучить / понять, как операторы запросов LINQ сопоставляются с реальными методами .

3
ответ дан 1 December 2019 в 05:49
поделиться

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

1
ответ дан 1 December 2019 в 05:49
поделиться
Другие вопросы по тегам:

Похожие вопросы: