Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Общие вопросы по .NET и C# > LINQ


Автор: QryStaL 24.12.2007, 11:52
Кто-нибудь разбирался, тестировал новую фичу C# LINQ? Есть какие-то проблемы/недостатки/особенности? Интересно оценить перспективы...

Автор: tol05 24.12.2007, 12:28
Бегло ознакомился. Не понравился. 

Особенностей много - это новый принцип запросов - для представления не реляционных источников данных, а  объектно-ориентированных источников данных. Но поскольку физически данные хранятся в реляционном виде, то отсюда недостатки LINQ - громозкая и ИМХО не очень понятная мне пока архитектура и, как и все оболочки, уменьшение быстродействия.

Опять же могу ошибаться

Цитата(QryStaL @  24.12.2007,  10:52 Найти цитируемый пост)
Интересно оценить перспективы

Sql Server 2008 будет поддерживать как T-SQL, так и LINQ

Автор: stab 24.12.2007, 12:54
побаловался немножко. при некотором опыте синтаксис запросов выглядит куда приятней\нагляднее\понятнее, чем циклы по тем же наборам, но в C# синтаксис LINQ несколько незавершённый, часто приходится прибегать к лямбдам; это, думаю, поправят в следующем релизе. ну и скорость немного помедленей, чем чистые циклы, что некритично для меня, т.к. моделировать реакции ядерного синтеза на C# не требуется.

перспективы.. уж точно не выкинут его из .NET, раз добавили; так чта, будут развивать, поддерживать и проталкивать. smile

Автор: D_F_V 25.12.2007, 04:07
http://weblogs.asp.net/stefansedich/archive/2007/12/24/i-think-i-love-linq.aspx  smile 

Автор: 1stain 25.12.2007, 09:55
D_F_V, похожий пример пример, как в ссылке делается через System.Configuration.ConfigurationSection, содержащий ConfigurationElementCollection без геморроя с парсингом XML, как в примере. Интересно было бы сравнить скорость выполнения.

Автор: RWander 27.12.2007, 21:24
http://www.realcoding.net/article/view/3188
Цитата

Новая технология Microsoft под названием Language Integrated Query (LINQ) дает программистам возможность устанавливать доступ к базе данных и источникам XML данных посредством расширений запросов, добавленных Microsoft в .NET Framework. LINQ закрывает одну из крупнейших брешей, существующих в сегодняшней модели разработки баз данных.

По сложившейся на настоящий момент практике разработчики баз данных, пользуясь объектно-ориентированным языком, таким как C# или Visual Basic .NET (VB.NET), создают клиентское приложение и объекты обработки бизнес данных, которые существуют на уровне данных, а ADO.NET является промежуточным программным обеспечением доступа к данным, которое соединяет приложение с базой данных. Однако, когда коду ADO.NET в ядре этих программ необходимо обратиться к базе данных, программист должен выйти за рамки объектно-ориентированной разработки Visual Studio (VS) и сконструировать запрос SQL, который отправляется на сервер. Компилятор в данном случае не может гарантировать разработчикам, что они работали с правильными таблицами или столбцами базы данных. Он даже не может проверить корректность синтаксиса запроса, поскольку запрос реально не исполняется, пока приложение работает.



Эта проблема решается в новой технологии LINQ путем реализации привязки объекта к базе данных и предоставления набора операторов, которые позволяют разработчику создавать запросы к базе данных непосредственно в коде .NET. Операторы, подобные операторам SQL, поддерживают извлечение данных, а также операции вставки, обновления и удаления – например, в LINQ имеются инструкции Select, Where и OrderBy. В этом первоначальном релизе оператор Select должен появляться в конце выражения в программах на C#, но в программах на VB оператор Select появляется привычно в начале.

Для облегчения процесса привязки базы данных к объекту, ранние бета-версии LINQ содержали инструмент, который мог генерировать таблицы и классы базы данных на основе объектов в целевой базе данных. LINQ не обладает совершенным механизмом привязки одной или нескольких реляционных таблиц к объектам обработки бизнес-данных, больше того, он создает простую связь один-к-одному между реляционными таблицами и программными объектами. Важно понимать следующее: несмотря на то, что LINQ воплощает новую модель разработки баз данных, эта технология не является полной заменой ADO.NET. Фактически LINQ использует ADO.NET, а приложение может извлечь пользу как от одной, так и от другой технологии. Несмотря на наличие объектно-ориентированного интерфейса для обращения к базе данных, по сути, как вы, наверное, догадались, LINQ по-прежнему направляет запросы SQL на сервер базы данных.

Хотя LINQ позиционируется как инструмент, способный сильно изменить будущую разработку для баз данных, нынешняя его версия являет собой только раннюю стадию развития. Подобно провайдерам данных ADO.NET, провайдеры LINQ используют открытую архитектуру, что позволяет сторонним поставщикам баз данных создавать провайдеры, которые работают со стандартом LINQ. Однако в настоящий момент LINQ работает только с SQL Server и не работает с Oracle и IBM DB2. Также, первоначальный выпуск запускается только на стороне клиента. Ясно, что следующим логичным шагом для LINQ стала бы возможность исполняться на сервере в среде управления на Common Language Runtime (CLR).

Для разработчиков для баз данных LINQ, пожалуй, самая значительная смена парадигмы с момента прихода ODBC. LINQ устраняет разрыв между приложением и базой данных и обеспечивает полностью объектно-ориентированный доступ к базе данных. Дополнительная информация о проекте LINQ – на сайте


Добавлено через 2 минуты и 37 секунд
очень не понравилось, что на данный момент нет возможности работы с другими СУБД, кроме SQL Server

Автор: RWander 29.12.2007, 00:10
немного поюзал LINQ и убедился, что нетакая уж и плахая это штука.. очень понравилась возможность работать с реляционной базой данных как с объекто-ориентированной.. очень удобно..

Автор: mr.DUDA 29.12.2007, 11:17
Насколько я понял, суть LINQ при работе с БД заключается в том, что используя C# мы пишем длинный составной SQL-запрос к базе, который выполняется при первом foreach.

Автор: Mymik 29.12.2007, 11:58
Цитата(RWander @  27.12.2007,  21:24 Найти цитируемый пост)
Также, первоначальный выпуск запускается только на стороне клиента.

я так понял, что "клиент" это GUI приложение ???
Ну и прочитав описание этой технологии несколькими постами выше, я начал думать, что LINQ не проберется в asp.net с SQL Server'ом. Потому что там используются Stored Procedure которые увеличивают производительность и защищенность от SQL-inj. Ну и потом, это опять получается, что Microsoft переходит к двухзвенной структуре общения, а ведь она этим так гордилась... мне это не сильно нравится.
Я ж надеюсь мы не скатимся до PHP программистов, которые выгружают из СУБД всю таблицу, а потом начинают с ней работать и забирать только нужные ей записи... 

Автор: RWander 29.12.2007, 12:08
Цитата(Mymik @  29.12.2007,  13:58 Найти цитируемый пост)
Я ж надеюсь мы не скатимся до PHP программистов, которые выгружают из СУБД всю таблицу, а потом начинают с ней работать и забирать только нужные ей записи...

похоже так и есть..)

Автор: Zakonnic 29.12.2007, 12:20
Ребят, а рефлектором никто его не смотрел? Хорошо бы узнать принципы работы поконкретнее, без предположений. 

Но кстати в одном блоге был пример теста скорости линка на огромном массиве интов - работает примерно в 1.5-2 раза медленнее цикла for. Приемлемая производительность, если без фанатизма. Другое дело - нет ли каких оптимизаций в плане доступа к БД и алгоритмов обработки запросов от ЛИНКа?

Автор: PashaPash 4.1.2008, 18:15
Цитата(RWander @  29.12.2007,  12:08 Найти цитируемый пост)
похоже так и есть..)

Неа, все совсем не так. Загрузка всей базы, и работа с ней на клиентской стороне - это датасеты. 
Основная фишка LINQ - операции над запросами, а не над самими данными. Если в Linq to SQL пару раз вызвать Where, сгруппировать, отсортировать, а потом попробовать у результата взять First(), то из базы выберется только одна строка. Т.е. стандартные провайдеры LINQ откладывают вычисления до последнего момента, пока вы сами не захотите получить конкретные данные. Вот и вся оптимизация :(

Автор: source777 8.1.2008, 00:00
Цитата(tol05 @  24.12.2007,  10:28 Найти цитируемый пост)
отсюда недостатки LINQ - громозкая и ИМХО не очень понятная мне пока архитектура и, как и все оболочки, уменьшение быстродействия.
один представитель MS убеждал меня, что LINQ работает быстрее, чем обычные SQL-запросы, т.к. создаёт максимально оптимизированные запросы, которые вручную писать гораздо дольше и сложнее... smile 

Автор: mr.DUDA 8.1.2008, 00:17
Цитата(source777 @  7.1.2008,  23:00 Найти цитируемый пост)
один представитель MS убеждал меня, что LINQ работает быстрее, чем обычные SQL-запросы, т.к. создаёт максимально оптимизированные запросы, которые вручную писать гораздо дольше и сложнее...

Зато убивается возможность оптимизировать запросы на стороне БД, т.к. каждый раз идёт новый запрос со своим SQL и соотв. планом выполнения. Убийство.

Автор: source777 10.1.2008, 22:46
Цитата

Зато убивается возможность оптимизировать запросы на стороне БД, т.к. каждый раз идёт новый запрос со своим SQL и соотв. планом выполнения.
да, это не есть хорошо, ну для MS SQL Server что-нить и на этот счёт придумают smile 

Автор: mr.DUDA 10.1.2008, 23:34
Цитата(source777 @  10.1.2008,  21:46 Найти цитируемый пост)
 для MS SQL Server 

А остальные MySQL, Firebird, Oracle, ... - фтопку ?  smile 

Автор: source777 11.1.2008, 21:22
Цитата

А остальные MySQL, Firebird, Oracle, ... - фтопку ? 
Не хотелось бы конечно, но MS всякое может учудить, надо же им свою СУБД продвигать... smile 
А так маркетинг: "только наша СУБД обеспичивает максимальное быстродействие с применением LINQ, даже быстрее чем без LINQ  smile " вполне в духе MS...

Автор: Любитель 14.1.2008, 13:30
Не, ну с БД понятно - LINQ (в текущем виде по крайней мере) ломает клиент-серверную архитектуру. Изначально. А чем в принципе технология (если это можно так назвать) не нравиться-то, я не пойму  smile По мне так - по крайней мере красиво. Хотя практически не использовал, хотя бы потому, что до недавнего времени с дотнет сталкивался только по особым праздниками. Даже с коллекциями работать, с XML, ... Чем плохо?  smile 

Автор: source777 14.1.2008, 15:31
Цитата

А чем в принципе технология (если это можно так назвать) не нравиться-то, я не пойму
А с чего ты взял, что она в принципе не нравится, наоборот даже, в принципе нравится, но есть пока кое-какие недочеты...

Автор: Real 21.1.2008, 15:10
Модератор: Сообщение скрыто.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)