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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


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

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

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

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

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

И в 90% если сесть и хорошенько подумать, то задача удивительным образом декомпозируется и теряет свою «реляционную» привязанность. Зачастую, я уже неоднократно с этим сталкивался, проблема кроется в «реляционном» мышлении. Когда человек автоматически любые данные старается сразу разложить по таблицам и организовать между ними связи. С одной стороны круто, но с другой — тупик. Надо мыслить шире, реляционная модель крутая, но одна всего лишь одна из, и не панацея.
...
Рейтинг: 0 / 0
Сложные SQL запросы на языке LINQ
    #39306588
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
Сложные SQL запросы на языке LINQ
    #39306591
Monochromatique
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
Сложные SQL запросы на языке LINQ
    #39306639
garbushka
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Monochromatique,
Это сложный sql запрос?
из фио выбрать ФАМИЛИЮ, Фамилия ........
...
Рейтинг: 0 / 0
Сложные SQL запросы на языке LINQ
    #39306645
Фотография ЕвгенийВ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Monochromatique
В блокноте, кстати.
Преобразует имя юзверя к божескому виду.
1. за такой код, без отступов и комментариев надо молотком один раз по пальцам и два раза по башке.
2. к РСУБД он имеет весьма опосредственное отношение
...
Рейтинг: 0 / 0
Сложные SQL запросы на языке LINQ
    #39306651
garbushka
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
MonochromatiqueВ блокноте, кстати.
блокнот не самое удобное средство для написания sql,
можно и верх ногами писать ... на заборе .....
...
Рейтинг: 0 / 0
Сложные SQL запросы на языке LINQ
    #39306670
sheich
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
MonochromatiqueЧто делает этот запрос? Написано человеком.
В блокноте, кстати.
не показательный пример
запрос не производит сложной выборки данных, а занимается уже обработкой представления данных
а это, имхо, уже задача не SQL как раз
...
Рейтинг: 0 / 0
Сложные SQL запросы на языке LINQ
    #39306687
Monochromatique
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ЕвгенийВПреобразует имя юзверя к божескому виду.

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

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



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

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

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


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

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

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

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

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

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

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

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





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

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


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