|
Сложные SQL запросы на языке LINQ
|
|||
---|---|---|---|
#18+
Коллеги, Начинаю только осваивать LINQ Пока складывается впечатление, что, грубо говоря, то, что можно на той или иной реализации SQL реализовать в одном запросе, поворачивая данные как тебе угодно, средствами LINQ - так же в одном запросе - реализовать практически невозможно. Либо это будет уже не запрос, а какой-то научный трактат... и тормозить будет безбожно. Дальше, наблюдая практику обращения с LINQ, дата контекстами, отдельными сущностями и т.п. в существующем проекте, с которым сейчас разбираюсь постепенно прихожу к выводу, что стиль работы с LINQ сводится к выборке малыми простыми запросами отдельных частей данных с последующими пошаговыми манипуляциями с ними. Например, реализовать в одном запросе сложный join (особенно если left) с кучей условий по каждому join - обреченная на провал идея. Так какие же подходы примеными на практике? Поправьте, если неправ ... |
|||
:
Нравится:
Не нравится:
|
|||
09.09.2016, 01:26 |
|
Сложные SQL запросы на языке LINQ
|
|||
---|---|---|---|
#18+
sheich, Вкратце: LINQ имеет все те же возможности, что и SQL, плюс let и ассоциации, которых в SQL нет. left join в LINQ неудобен, но на практике стараются пользоваться ассоциациями, самому описывать join приходится редко. Выводы делай сам. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.09.2016, 04:28 |
|
Сложные SQL запросы на языке LINQ
|
|||
---|---|---|---|
#18+
sheichТак какие же подходы примеными на практике? Поправьте, если неправ Для начала необходимо понять, что LINQ это не альтернатива SQL, никогда ей не была, и вовсе не задумывалось таковой. Поэтому сравнивать SQL vs LINQ — вообще не корректно, в принципе. Это как сравнивать пилу с молотком. Поэтому составлять впечатления о LINQ через призму SQL — не правильно. Да, LINQ может транслироваться в SQL. Но суть у них разная. SQL оперирует таблицами, а LINQ коллекциями. У таблицы не может быть поля-коллекции, а у LINQ может. У SQL не может быть поля-записи-из-другой-таблицы, а у LINQ может. Обычно, если данные хорошо нормализованы и укладываются в объектную модель приложения, то запросы на LINQ писать гораздо легче, они понятнее, логичнее и проще, чем аналог на SQL. С другой стороны на SQL можно написать ТАКОЕ, что в LINQ сделать почти не реально... вот только надо понимать, такие запросы изначально нафиг не нужны были в LINQ, а если пристально присмотреться, то скорее всего необходимость таких адских запросов — это большой косяк в разработке. Но то такое... ... |
|||
:
Нравится:
Не нравится:
|
|||
09.09.2016, 07:58 |
|
Сложные SQL запросы на языке LINQ
|
|||
---|---|---|---|
#18+
hVosttПоэтому составлять впечатления о LINQ через призму SQL — не правильно.Правильно, если планируем применять LINQ для генерации SQL. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.09.2016, 09:17 |
|
Сложные SQL запросы на языке LINQ
|
|||
---|---|---|---|
#18+
Алексей КПравильно, если планируем применять LINQ для генерации SQL. Так почему бы тогда сразу не писать SQL? Правильная постановка задачи -- уже пол решения, у тебя постановка неправильная, поэтому и выводы в корне неправильные. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.09.2016, 10:00 |
|
Сложные SQL запросы на языке LINQ
|
|||
---|---|---|---|
#18+
hVosttАлексей КПравильно, если планируем применять LINQ для генерации SQL. Так почему бы тогда сразу не писать SQL? Правильная постановка задачи -- уже пол решения, у тебя постановка неправильная, поэтому и выводы в корне неправильные. Ну, например, потому, что SQL-запросы писать в коде на C# бывает менее удобно и производительно, чем на LINQ. Хотя дело вкуса, конечно. Я вот и SQL-ем и LINQ-ом пользуюсь. Причем SQL-ем чаще, но только потому, что знаю его лучше, чем LINQ. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.09.2016, 10:27 |
|
Сложные SQL запросы на языке LINQ
|
|||
---|---|---|---|
#18+
stomskyНу, например, потому, что SQL-запросы писать в коде на C# бывает менее удобно и производительно, чем на LINQ. Хотя дело вкуса, конечно. Я вот и SQL-ем и LINQ-ом пользуюсь. Причем SQL-ем чаще, но только потому, что знаю его лучше, чем LINQ. Я вообще не пользуюсь SQL-ем, кроме крайне специфичных случаев. Не потому что LINQ мне кажется более выразительным, чем SQL. А потому, что на LINQ решаются задачи, специфичные для LINQ, а именно — извлечение данных объектов. На практике выяснилось: то, что раньше решалось сложными SQL с листингом не несколько страниц, проще решается избыточным хранением данных в нужном виде. Например, SQL-style: десятки JOIN-ов (INNER, LEFT/RIGHT, OUTER) с массой EXISTS/WHERE подвыборками, группировоками, и тому прочее. LINQ-style: ведение параллельно в БД отдельной плоской структуры всех необходимых данных, к которой осуществляется простой доступ как к коллекции. Да, избыточно. Да, слегка снижается скорость прямой записи/изменений (это если не делать отложенную очередь). Но, крайне эффективные молниеносные выборки, быстрее, чем SQL-style, местами на порядки. Очень понятно для сопровождения, поддаётся контролю и полному тестированию. Не зависит от природы СУБД. Промежуточный способ: сделать SQL-View и отразить её, как таблицу. Удобно для тех, кто способен понимать только SQL-style, удобно, когда задачу надо решить экстремально быстро и плевать на последствия. Неудобно для сопровождения, практически не тестируется модульно, грозит большим увесистым долгом. Сложно транслировать решение на другую СУБД или вообще на NoSQL. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.09.2016, 11:15 |
|
Сложные SQL запросы на языке LINQ
|
|||
---|---|---|---|
#18+
SQL - вообще трешак, как можно серьезно воспринимать запросы на >35 страниц? Как их дебажить? LINQ - наше всё. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.09.2016, 11:23 |
|
Сложные SQL запросы на языке LINQ
|
|||
---|---|---|---|
#18+
hVostt, возможно) пока не очень знаком с linq но пока впечатление такое, что предлагается как раз отложить в сторону пилу и все делать только молотком а пила то и была заточена именно под обработку реляционных данных и прекрасно с этим справляется и много лет оттачивалась и совершенствовалась. кроме того sql - он внутри субд, там, на месте все запрашивает и знает, как и чего. linq же как и любые другие запросы извне, со стороны приложения все-таки дергает раз за разом базу снаружи и это само по себе извращение, имхо я всегда шел по пути кесарю-кесарево: sql - для таблиц в бд, c#/java etc. - для приложения, коммуникации, сервисов, javascript/css - для интерфейса. не мешаем мухи и котлеты а тут... при работе с linq все перемешано.. бд используется просто как помойка с простыми таблицами, а приложение гоняет данные и запросы туда сюда, "думая", что имеет дело с местными данными идея сама по себе странная но подход у нынешнего работодателя такой( все таки, каждая часть системы должна заниматься своей работой. и за субд обидно )) ладно еще, если в целях хранилища используется mysql, там или еще чего. но когда mssql или oracle превращают в простые свалки... это как микроскопом солить огурцы ... |
|||
:
Нравится:
Не нравится:
|
|||
09.09.2016, 11:59 |
|
Сложные SQL запросы на языке LINQ
|
|||
---|---|---|---|
#18+
MonochromatiqueSQL - вообще трешак, как можно серьезно воспринимать запросы на >35 страниц? Как их дебажить? Все зависит от уровня подготовки. Есть люди которые запросто работают с хп, в которых только объявление временных таблиц занимает >35 страниц. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.09.2016, 12:25 |
|
Сложные SQL запросы на языке LINQ
|
|||
---|---|---|---|
#18+
hVosttПромежуточный способ: сделать SQL-View и отразить её, как таблицу. или прямо на sql-запрос отмапить DTO. SQL-View / sql-запрос на мой взгляд самый разумный компромисс. hVosttУдобно для тех, кто способен понимать только SQL-style, удобно, когда задачу надо решить экстремально быстро и плевать на последствия . Неудобно для сопровождения, практически не тестируется модульно, грозит большим увесистым долгом . сильно категорично. часто запросы для DTO реально сложные (всякие аналитические функции и пр.) и заточены на обработку именно "реляционного отношения", а не "списка объектов". к тому же обратное отображение O->R для них не надо. hVosttСложно транслировать решение на другую СУБД или вообще на NoSQL. или вообще на Java под Linux ... |
|||
:
Нравится:
Не нравится:
|
|||
09.09.2016, 12:26 |
|
Сложные SQL запросы на языке LINQ
|
|||
---|---|---|---|
#18+
hVosttТак почему бы тогда сразу не писать SQL? Правильная постановка задачи -- уже пол решения, у тебя постановка неправильная, поэтому и выводы в корне неправильные. просто таков подход компании. никто не хочет связываться с sql hVosttСложно транслировать решение на другую СУБД или вообще на NoSQL. самое смешное в том, что, вот, часто по поводу той или иной "платформонезависимой" (субд-независимой) технологии ее сторонники кричат и упирают на это ее преимущество - абстрагированность от операционной системы, уровня данных бла-бла. но на практике разве часто встречаются компании, которые бы регулярно меняли платформу? по моему опыту-нет. если уж компания подсела на windows, ms exchange, mssql или oracle, linux, то уж не слезет с проверенной технологии. кому нужны такие риски? кому нужно новых специалистов искать, растить? ... |
|||
:
Нравится:
Не нравится:
|
|||
09.09.2016, 12:48 |
|
Сложные SQL запросы на языке LINQ
|
|||
---|---|---|---|
#18+
sheichя всегда шел по пути кесарю-кесарево: sql - для таблиц в бд sheichа тут... при работе с linq все перемешано.. бд используется просто как помойка с простыми таблицами, а приложение гоняет данные и запросы туда сюда, "думая", что имеет дело с местными данными идея сама по себе странная А ничего и не поменялось. SQL — это средство для работы с СУБД. Если говорить о БД, то «помойка с простыми таблицами» это и есть самая суть БД. Да, именно. Хранилище данных. Чем проще — тем лучше. Или вы не получите удовлетворения от результата работы, если все слишком просто? Надо обязательно усложнить! Триггеры! Табличные процедуры! ))))) В LINQ ничего не перемешано, это уровень абстракции. Правильно было бы провести такую аналогию: asm → C/C++ (реализация языка написана на ассемблере) SQL → LINQ (данные из БД LINQ достаёт посредством SQL) Никто же сейчас не нудит, дескать, чего это никто на ассемблере не кодит, все на языки высокого уровня перешли. Даже грустно как-то sheichно подход у нынешнего работодателя такой( При чём тут работодатель? Обойдите свой вопрос с другой стороны и посмотрите с другой точки зрения. Ведь даже памятник Пушкину с определённой стороны это всего лишь каменная жопа sheichи за субд обидно )) ладно еще, если в целях хранилища используется mysql, там или еще чего. но когда mssql или oracle превращают в простые свалки... это как микроскопом солить огурцы Если хочется делать упор на SQL, ищите работу, где потребуется много работы непосредственно с базой данных. Таких компаний достаточно много, предложений достаточно, да и задачи соответствующие, где это может быть актуально — есть. Кесарю — кесарево. Сами сказали. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.09.2016, 13:06 |
|
Сложные SQL запросы на языке LINQ
|
|||
---|---|---|---|
#18+
Перегонщик перекупкисильно категорично. часто запросы для DTO реально сложные (всякие аналитические функции и пр.) и заточены на обработку именно "реляционного отношения", а не "списка объектов". к тому же обратное отображение O->R для них не надо. И в 90% если сесть и хорошенько подумать, то задача удивительным образом декомпозируется и теряет свою «реляционную» привязанность. Зачастую, я уже неоднократно с этим сталкивался, проблема кроется в «реляционном» мышлении. Когда человек автоматически любые данные старается сразу разложить по таблицам и организовать между ними связи. С одной стороны круто, но с другой — тупик. Надо мыслить шире, реляционная модель крутая, но одна всего лишь одна из, и не панацея. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.09.2016, 13:10 |
|
Сложные SQL запросы на языке LINQ
|
|||
---|---|---|---|
#18+
ЕвгенийВВсе зависит от уровня подготовки. Что делает этот запрос? Написано человеком. Код: sql 1.
... |
|||
:
Нравится:
Не нравится:
|
|||
09.09.2016, 14:00 |
|
Сложные SQL запросы на языке LINQ
|
|||
---|---|---|---|
#18+
MonochromatiqueЕвгенийВВсе зависит от уровня подготовки. Что делает этот запрос? Написано человеком. Код: sql 1.
В блокноте, кстати. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.09.2016, 14:02 |
|
Сложные SQL запросы на языке LINQ
|
|||
---|---|---|---|
#18+
Monochromatique, Это сложный sql запрос? из фио выбрать ФАМИЛИЮ, Фамилия ........ ... |
|||
:
Нравится:
Не нравится:
|
|||
09.09.2016, 14:51 |
|
Сложные SQL запросы на языке LINQ
|
|||
---|---|---|---|
#18+
Monochromatique В блокноте, кстати. Преобразует имя юзверя к божескому виду. 1. за такой код, без отступов и комментариев надо молотком один раз по пальцам и два раза по башке. 2. к РСУБД он имеет весьма опосредственное отношение ... |
|||
:
Нравится:
Не нравится:
|
|||
09.09.2016, 15:01 |
|
Сложные SQL запросы на языке LINQ
|
|||
---|---|---|---|
#18+
MonochromatiqueВ блокноте, кстати. блокнот не самое удобное средство для написания sql, можно и верх ногами писать ... на заборе ..... ... |
|||
:
Нравится:
Не нравится:
|
|||
09.09.2016, 15:09 |
|
Сложные SQL запросы на языке LINQ
|
|||
---|---|---|---|
#18+
MonochromatiqueЧто делает этот запрос? Написано человеком. В блокноте, кстати. не показательный пример запрос не производит сложной выборки данных, а занимается уже обработкой представления данных а это, имхо, уже задача не SQL как раз ... |
|||
:
Нравится:
Не нравится:
|
|||
09.09.2016, 15:28 |
|
Сложные SQL запросы на языке LINQ
|
|||
---|---|---|---|
#18+
ЕвгенийВПреобразует имя юзверя к божескому виду. Ну, с такой трактовкой, в LINQ это выглядело бы так - Код: c# 1.
Без отступов и комментариев. Так что LINQ всё равно впереди. Распелись - запрос в три строчки - никто не может ЧЕТКО сказать, что он делает. Вот вам и "падгатовка", отступы с комментариями. )))) ЕвгенийВ2. к РСУБД он имеет весьма опосредственное отношение Угу. А 50 страниц черного текста ЗУП-овского треша имеют? ... |
|||
:
Нравится:
Не нравится:
|
|||
09.09.2016, 15:41 |
|
Сложные SQL запросы на языке LINQ
|
|||
---|---|---|---|
#18+
garbushkaMonochromatique, Это сложный sql запрос? Не знаю. Но от тебя я отчета не увидел. Твое сообщение мне дешифровать не удалось. ))) ... |
|||
:
Нравится:
Не нравится:
|
|||
09.09.2016, 15:42 |
|
Сложные SQL запросы на языке LINQ
|
|||
---|---|---|---|
#18+
MonochromatiquegarbushkaMonochromatique, Это сложный sql запрос? Не знаю. Но от тебя я отчета не увидел. Твое сообщение мне дешифровать не удалось. ))) Извини, ответа не увидел. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.09.2016, 15:43 |
|
Сложные SQL запросы на языке LINQ
|
|||
---|---|---|---|
#18+
MonochromatiqueНу, с такой трактовкой, в LINQ это выглядело бы так - Код: c# 1.
а в SQL так Код: plsql 1.
... |
|||
:
Нравится:
Не нравится:
|
|||
09.09.2016, 16:02 |
|
Сложные SQL запросы на языке LINQ
|
|||
---|---|---|---|
#18+
sheichMonochromatiqueЧто делает этот запрос? Написано человеком. В блокноте, кстати. не показательный пример запрос не производит сложной выборки данных, а занимается уже обработкой представления данных а это, имхо, уже задача не SQL как раз в целом, да. но иногда, особенно, когда это представление зависит не только от текущей записи, а еще от других, лучше, все же, SQL (конечно, если это полноценная СУБД, типа ORACLE или SQL SERVER) ... |
|||
:
Нравится:
Не нравится:
|
|||
09.09.2016, 17:57 |
|
|
start [/forum/topic.php?fid=17&fpage=9&tid=1349361]: |
0ms |
get settings: |
12ms |
get forum list: |
15ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
43ms |
get topic data: |
14ms |
get forum data: |
3ms |
get page messages: |
65ms |
get tp. blocked users: |
2ms |
others: | 15ms |
total: | 177ms |
0 / 0 |