Гость
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / Сложные SQL запросы на языке LINQ / 25 сообщений из 135, страница 1 из 6
09.09.2016, 01:26
    #39306240
sheich
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сложные SQL запросы на языке LINQ
Коллеги,
Начинаю только осваивать LINQ
Пока складывается впечатление, что, грубо говоря, то, что можно на той или иной реализации SQL реализовать в одном запросе, поворачивая данные как тебе угодно, средствами LINQ - так же в одном запросе - реализовать практически невозможно. Либо это будет уже не запрос, а какой-то научный трактат... и тормозить будет безбожно.
Дальше, наблюдая практику обращения с LINQ, дата контекстами, отдельными сущностями и т.п. в существующем проекте, с которым сейчас разбираюсь постепенно прихожу к выводу, что стиль работы с LINQ сводится к выборке малыми простыми запросами отдельных частей данных с последующими пошаговыми манипуляциями с ними.
Например, реализовать в одном запросе сложный join (особенно если left) с кучей условий по каждому join - обреченная на провал идея.
Так какие же подходы примеными на практике?
Поправьте, если неправ
...
Рейтинг: 0 / 0
09.09.2016, 04:28
    #39306247
Алексей К
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сложные SQL запросы на языке LINQ
sheich,

Вкратце: LINQ имеет все те же возможности, что и SQL, плюс let и ассоциации, которых в SQL нет. left join в LINQ неудобен, но на практике стараются пользоваться ассоциациями, самому описывать join приходится редко.

Выводы делай сам.
...
Рейтинг: 0 / 0
09.09.2016, 07:58
    #39306282
hVostt
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сложные SQL запросы на языке LINQ
sheichТак какие же подходы примеными на практике?
Поправьте, если неправ

Для начала необходимо понять, что LINQ это не альтернатива SQL, никогда ей не была, и вовсе не задумывалось таковой. Поэтому сравнивать SQL vs LINQ — вообще не корректно, в принципе. Это как сравнивать пилу с молотком.

Поэтому составлять впечатления о LINQ через призму SQL — не правильно. Да, LINQ может транслироваться в SQL. Но суть у них разная. SQL оперирует таблицами, а LINQ коллекциями. У таблицы не может быть поля-коллекции, а у LINQ может. У SQL не может быть поля-записи-из-другой-таблицы, а у LINQ может.

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

С другой стороны на SQL можно написать ТАКОЕ, что в LINQ сделать почти не реально... вот только надо понимать, такие запросы изначально нафиг не нужны были в LINQ, а если пристально присмотреться, то скорее всего необходимость таких адских запросов — это большой косяк в разработке. Но то такое...
...
Рейтинг: 0 / 0
09.09.2016, 09:17
    #39306340
Алексей К
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сложные SQL запросы на языке LINQ
hVosttПоэтому составлять впечатления о LINQ через призму SQL — не правильно.Правильно, если планируем применять LINQ для генерации SQL.
...
Рейтинг: 0 / 0
09.09.2016, 10:00
    #39306369
hVostt
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сложные SQL запросы на языке LINQ
Алексей КПравильно, если планируем применять LINQ для генерации SQL.

Так почему бы тогда сразу не писать SQL? Правильная постановка задачи -- уже пол решения, у тебя постановка неправильная, поэтому и выводы в корне неправильные.
...
Рейтинг: 0 / 0
09.09.2016, 10:27
    #39306405
stomsky
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сложные SQL запросы на языке LINQ
hVosttАлексей КПравильно, если планируем применять LINQ для генерации SQL.
Так почему бы тогда сразу не писать SQL? Правильная постановка задачи -- уже пол решения, у тебя постановка неправильная, поэтому и выводы в корне неправильные.
Ну, например, потому, что SQL-запросы писать в коде на C# бывает менее удобно и производительно, чем на LINQ. Хотя дело вкуса, конечно.
Я вот и SQL-ем и LINQ-ом пользуюсь. Причем SQL-ем чаще, но только потому, что знаю его лучше, чем LINQ.
...
Рейтинг: 0 / 0
09.09.2016, 11:15
    #39306459
hVostt
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сложные SQL запросы на языке LINQ
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.
...
Рейтинг: 0 / 0
09.09.2016, 11:23
    #39306467
Monochromatique
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сложные SQL запросы на языке LINQ
SQL - вообще трешак, как можно серьезно воспринимать запросы на >35 страниц? Как их дебажить?

LINQ - наше всё.
...
Рейтинг: 0 / 0
09.09.2016, 11:59
    #39306501
sheich
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сложные SQL запросы на языке LINQ
hVostt,

возможно) пока не очень знаком с linq
но пока впечатление такое, что предлагается как раз отложить в сторону пилу и все делать только молотком
а пила то и была заточена именно под обработку реляционных данных и прекрасно с этим справляется и много лет оттачивалась и совершенствовалась. кроме того sql - он внутри субд, там, на месте все запрашивает и знает, как и чего. linq же как и любые другие запросы извне, со стороны приложения все-таки дергает раз за разом базу снаружи и это само по себе извращение, имхо
я всегда шел по пути кесарю-кесарево: sql - для таблиц в бд, c#/java etc. - для приложения, коммуникации, сервисов, javascript/css - для интерфейса. не мешаем мухи и котлеты
а тут... при работе с linq все перемешано.. бд используется просто как помойка с простыми таблицами, а приложение гоняет данные и запросы туда сюда, "думая", что имеет дело с местными данными
идея сама по себе странная
но подход у нынешнего работодателя такой(
все таки, каждая часть системы должна заниматься своей работой. и за субд обидно )) ладно еще, если в целях хранилища используется mysql, там или еще чего. но когда mssql или oracle превращают в простые свалки... это как микроскопом солить огурцы
...
Рейтинг: 0 / 0
09.09.2016, 12:25
    #39306508
ЕвгенийВ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сложные SQL запросы на языке LINQ
MonochromatiqueSQL - вообще трешак, как можно серьезно воспринимать запросы на >35 страниц? Как их дебажить?

Все зависит от уровня подготовки.
Есть люди которые запросто работают с хп, в которых только объявление временных таблиц занимает >35 страниц.
...
Рейтинг: 0 / 0
09.09.2016, 12:26
    #39306509
Перегонщик перекупки
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сложные SQL запросы на языке LINQ
hVosttПромежуточный способ: сделать SQL-View и отразить её, как таблицу.

или прямо на sql-запрос отмапить DTO. SQL-View / sql-запрос на мой взгляд самый разумный компромисс.

hVosttУдобно для тех, кто способен понимать только SQL-style, удобно, когда задачу надо решить экстремально быстро и плевать на последствия . Неудобно для сопровождения, практически не тестируется модульно, грозит большим увесистым долгом .

сильно категорично. часто запросы для DTO реально сложные (всякие аналитические функции и пр.) и заточены на обработку именно "реляционного отношения", а не "списка объектов". к тому же обратное отображение O->R для них не надо.

hVosttСложно транслировать решение на другую СУБД или вообще на NoSQL.

или вообще на Java под Linux
...
Рейтинг: 0 / 0
09.09.2016, 12:48
    #39306533
sheich
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сложные SQL запросы на языке LINQ
hVosttТак почему бы тогда сразу не писать SQL? Правильная постановка задачи -- уже пол решения, у тебя постановка неправильная, поэтому и выводы в корне неправильные.
просто таков подход компании. никто не хочет связываться с sql

hVosttСложно транслировать решение на другую СУБД или вообще на NoSQL.
самое смешное в том, что, вот, часто по поводу той или иной "платформонезависимой" (субд-независимой) технологии ее сторонники кричат и упирают на это ее преимущество - абстрагированность от операционной системы, уровня данных бла-бла. но на практике разве часто встречаются компании, которые бы регулярно меняли платформу? по моему опыту-нет. если уж компания подсела на windows, ms exchange, mssql или oracle, linux, то уж не слезет с проверенной технологии. кому нужны такие риски? кому нужно новых специалистов искать, растить?
...
Рейтинг: 0 / 0
09.09.2016, 13:06
    #39306551
hVostt
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сложные SQL запросы на языке LINQ
sheichя всегда шел по пути кесарю-кесарево: sql - для таблиц в бд
sheichа тут... при работе с linq все перемешано.. бд используется просто как помойка с простыми таблицами, а приложение гоняет данные и запросы туда сюда, "думая", что имеет дело с местными данными
идея сама по себе странная

А ничего и не поменялось. SQL — это средство для работы с СУБД. Если говорить о БД, то «помойка с простыми таблицами» это и есть самая суть БД. Да, именно. Хранилище данных. Чем проще — тем лучше.

Или вы не получите удовлетворения от результата работы, если все слишком просто? Надо обязательно усложнить! Триггеры! Табличные процедуры! )))))

В LINQ ничего не перемешано, это уровень абстракции.

Правильно было бы провести такую аналогию:

asm → C/C++ (реализация языка написана на ассемблере)
SQL → LINQ (данные из БД LINQ достаёт посредством SQL)

Никто же сейчас не нудит, дескать, чего это никто на ассемблере не кодит, все на языки высокого уровня перешли. Даже грустно как-то


sheichно подход у нынешнего работодателя такой(

При чём тут работодатель? Обойдите свой вопрос с другой стороны и посмотрите с другой точки зрения. Ведь даже памятник Пушкину с определённой стороны это всего лишь каменная жопа

sheichи за субд обидно )) ладно еще, если в целях хранилища используется mysql, там или еще чего. но когда mssql или oracle превращают в простые свалки... это как микроскопом солить огурцы

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

Кесарю — кесарево. Сами сказали.
...
Рейтинг: 0 / 0
09.09.2016, 13:10
    #39306556
hVostt
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сложные SQL запросы на языке LINQ
Перегонщик перекупкисильно категорично. часто запросы для DTO реально сложные (всякие аналитические функции и пр.) и заточены на обработку именно "реляционного отношения", а не "списка объектов". к тому же обратное отображение O->R для них не надо.

И в 90% если сесть и хорошенько подумать, то задача удивительным образом декомпозируется и теряет свою «реляционную» привязанность. Зачастую, я уже неоднократно с этим сталкивался, проблема кроется в «реляционном» мышлении. Когда человек автоматически любые данные старается сразу разложить по таблицам и организовать между ними связи. С одной стороны круто, но с другой — тупик. Надо мыслить шире, реляционная модель крутая, но одна всего лишь одна из, и не панацея.
...
Рейтинг: 0 / 0
09.09.2016, 14:00
    #39306588
Monochromatique
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сложные SQL запросы на языке LINQ
ЕвгенийВВсе зависит от уровня подготовки.

Что делает этот запрос? Написано человеком.

Код: sql
1.
SELECT TRIM(' ' FROM UPPER(DECODE(SUBSTR(FULLNAME,1,INSTR(FULLNAME,' ')),NULL,FULLNAME,SUBSTR(FULLNAME,1,INSTR(FULLNAME,' '))))), TRIM(' ' FROM INITCAP(LOWER(DECODE(SUBSTR(FULLNAME,1,INSTR(FULLNAME,' ')),NULL,FULLNAME,SUBSTR(FULLNAME,1,INSTR(FULLNAME,' '))))))||' '||TRIM( ' ' FROM((DECODE(SUBSTR(FULLNAME,1,INSTR(FULLNAME,' ')),NULL,NULL,SUBSTR(FULLNAME,INSTR(FULLNAME,' ')))))) FROM MINEUSERS
...
Рейтинг: 0 / 0
09.09.2016, 14:02
    #39306591
Monochromatique
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сложные SQL запросы на языке LINQ
MonochromatiqueЕвгенийВВсе зависит от уровня подготовки.

Что делает этот запрос? Написано человеком.

Код: sql
1.
SELECT TRIM(' ' FROM UPPER(DECODE(SUBSTR(FULLNAME,1,INSTR(FULLNAME,' ')),NULL,FULLNAME,SUBSTR(FULLNAME,1,INSTR(FULLNAME,' '))))), TRIM(' ' FROM INITCAP(LOWER(DECODE(SUBSTR(FULLNAME,1,INSTR(FULLNAME,' ')),NULL,FULLNAME,SUBSTR(FULLNAME,1,INSTR(FULLNAME,' '))))))||' '||TRIM( ' ' FROM((DECODE(SUBSTR(FULLNAME,1,INSTR(FULLNAME,' ')),NULL,NULL,SUBSTR(FULLNAME,INSTR(FULLNAME,' ')))))) FROM MINEUSERS



В блокноте, кстати.
...
Рейтинг: 0 / 0
09.09.2016, 14:51
    #39306639
garbushka
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сложные SQL запросы на языке LINQ
Monochromatique,
Это сложный sql запрос?
из фио выбрать ФАМИЛИЮ, Фамилия ........
...
Рейтинг: 0 / 0
09.09.2016, 15:01
    #39306645
ЕвгенийВ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сложные SQL запросы на языке LINQ
Monochromatique
В блокноте, кстати.
Преобразует имя юзверя к божескому виду.
1. за такой код, без отступов и комментариев надо молотком один раз по пальцам и два раза по башке.
2. к РСУБД он имеет весьма опосредственное отношение
...
Рейтинг: 0 / 0
09.09.2016, 15:09
    #39306651
garbushka
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сложные SQL запросы на языке LINQ
MonochromatiqueВ блокноте, кстати.
блокнот не самое удобное средство для написания sql,
можно и верх ногами писать ... на заборе .....
...
Рейтинг: 0 / 0
09.09.2016, 15:28
    #39306670
sheich
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сложные SQL запросы на языке LINQ
MonochromatiqueЧто делает этот запрос? Написано человеком.
В блокноте, кстати.
не показательный пример
запрос не производит сложной выборки данных, а занимается уже обработкой представления данных
а это, имхо, уже задача не SQL как раз
...
Рейтинг: 0 / 0
09.09.2016, 15:41
    #39306687
Monochromatique
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сложные SQL запросы на языке LINQ
ЕвгенийВПреобразует имя юзверя к божескому виду.

Ну, с такой трактовкой, в LINQ это выглядело бы так -

Код: c#
1.
userFIO = FIO.to_bojeskiy_vid();



Без отступов и комментариев. Так что LINQ всё равно впереди.

Распелись - запрос в три строчки - никто не может ЧЕТКО сказать, что он делает.

Вот вам и "падгатовка", отступы с комментариями. ))))


ЕвгенийВ2. к РСУБД он имеет весьма опосредственное отношение

Угу. А 50 страниц черного текста ЗУП-овского треша имеют?
...
Рейтинг: 0 / 0
09.09.2016, 15:42
    #39306689
Monochromatique
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сложные SQL запросы на языке LINQ
garbushkaMonochromatique,
Это сложный sql запрос?

Не знаю. Но от тебя я отчета не увидел.

Твое сообщение мне дешифровать не удалось. )))
...
Рейтинг: 0 / 0
09.09.2016, 15:43
    #39306690
Monochromatique
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сложные SQL запросы на языке LINQ
MonochromatiquegarbushkaMonochromatique,
Это сложный sql запрос?

Не знаю. Но от тебя я отчета не увидел.

Твое сообщение мне дешифровать не удалось. )))

Извини, ответа не увидел.
...
Рейтинг: 0 / 0
09.09.2016, 16:02
    #39306717
Перегонщик перекупки
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сложные SQL запросы на языке LINQ
MonochromatiqueНу, с такой трактовкой, в LINQ это выглядело бы так -

Код: c#
1.
userFIO = FIO.to_bojeskiy_vid();





а в SQL так
Код: plsql
1.
to_bojeskiy_vid(fio)
...
Рейтинг: 0 / 0
09.09.2016, 17:57
    #39306804
fsharp_fsharp
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сложные SQL запросы на языке LINQ
sheichMonochromatiqueЧто делает этот запрос? Написано человеком.
В блокноте, кстати.
не показательный пример
запрос не производит сложной выборки данных, а занимается уже обработкой представления данных
а это, имхо, уже задача не SQL как раз

в целом, да. но иногда, особенно, когда это представление зависит не только от текущей записи, а еще от других, лучше, все же, SQL (конечно, если это полноценная СУБД, типа ORACLE или SQL SERVER)
...
Рейтинг: 0 / 0
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / Сложные SQL запросы на языке LINQ / 25 сообщений из 135, страница 1 из 6
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]