Deutsch
Germany.ruФорумы → Архив Досок→ Программирование

Любителям SQL (оракле), можно ли перевести этот запрос в LINQ?

545  
AlexNek патриот05.05.23 20:56
AlexNek
05.05.23 20:56 

Есть большое подозрение, что нет, хотя может как то извратится можно, чтобы не сильно медленно было?

Никогда еще на попадалась подобная конструкция

SELECT * FROM "WorkflowGroups"
START WITH "Guid" IN (
  SELECT g."Guid" FROM "TerminalConfigWorkflowGroup" t
  INNER JOIN "WorkflowGroups" g ON t."WorkflowGroupGuid" = g.""Guid""
  WHERE t."TerminalConfigGuid" = {0})
CONNECT BY PRIOR "Guid"" = "ParentGroupGuid"

Проблема в том, что у постгреса другой синтакс и везде в коде linq.

#1 
alex445 коренной житель05.05.23 22:23
NEW 05.05.23 22:23 
в ответ AlexNek 05.05.23 20:56

Когда у мелкомягких что-то другое - фу, проклятый мелкософт, не по стандартам делает.

Когда у немелкомягких что-то другое - крутые фичи, нестандартно мыслят и делают. А мелкософт опять обосрался - не смог повторить у себя, чтобы было не медленно.

#2 
Murr патриот05.05.23 23:16
Murr
NEW 05.05.23 23:16 
в ответ AlexNek 05.05.23 20:56
AlexNek патриот06.05.23 11:33
AlexNek
NEW 06.05.23 11:33 
в ответ Murr 05.05.23 23:16

Спасибо, только ничего не понял

Единственное это, что в принципе было и так понятно (вызывать 'внутренний' запрос в цикле)

var subset = new List<DispositionPossibility>();
foreach (var disp in query.OrderBy(x => x.ParentCode).ToArray())
{
    if (!disp.ParentCode.HasValue)
        subset.Add(disp);
    else
        break;
}
#4 
alex445 коренной житель06.05.23 12:10
NEW 06.05.23 12:10 
в ответ AlexNek 06.05.23 11:33

А как же сакральное DBA-шное "отдать всю работу СУБД"? Вы что, запросы по полстраницы не любите? Их же так приятно дебажить и искать в них ошибки!

#5 
Murr патриот07.05.23 00:48
Murr
NEW 07.05.23 00:48 
в ответ AlexNek 06.05.23 11:33

вызывать 'внутренний' запрос в цикле

-----

Так СУБД и не должны содержать средств для работы с деревьями.

То, что в оракле что-то слепили для этого на уровне языка - на то оно и оракле...


ничего не понял

-----

Там где-то в ответах был предложен упрощенный вариант рекурсивной выборки.

Рабочий или нет - не знаю, не проверял.

#6 
Murr патриот07.05.23 00:49
Murr
NEW 07.05.23 00:49 
в ответ AlexNek 05.05.23 20:56

что у постгреса другой синтакс и везде в коде linq.

-----

Напиши процедуру и дергай ее.

#7 
AlexNek патриот07.05.23 10:07
AlexNek
NEW 07.05.23 10:07 
в ответ Murr 07.05.23 00:48
То, что в оракле что-то слепили

В постгресе тоже есть аналог, но опять останется sql


Там где-то в ответах был предложен упрощенный вариант рекурсивной выборки.

В болтовне может и есть но не на примере. Или не заметил, надо еще раз глянуть.

#8 
AlexNek патриот07.05.23 10:08
AlexNek
NEW 07.05.23 10:08 
в ответ Murr 07.05.23 00:49
Напиши процедуру и дергай ее.

А чем она будет лучше SQL? опять привязка к СУБД

#9 
alex445 коренной житель07.05.23 11:35
NEW 07.05.23 11:35 
в ответ AlexNek 07.05.23 10:08

Тогда голый скл прямо в коде?

#10 
Murr патриот07.05.23 16:07
Murr
NEW 07.05.23 16:07 
в ответ AlexNek 07.05.23 10:08

А чем она будет лучше SQL?

------

Ну так не пользуй СКЛ - пользуйся процедурой как таблицей.


опять привязка к СУБД

------

Это - да, но оно изолированно...

#11 
AlexNek патриот07.05.23 18:06
AlexNek
NEW 07.05.23 18:06 
в ответ Murr 07.05.23 16:07
пользуйся процедурой как таблицей

не не, лучше уж твоим путем

https://michaelceber.medium.com/implementing-a-recursive-p...

#12 
AlexNek патриот07.05.23 18:08
AlexNek
NEW 07.05.23 18:08 
в ответ alex445 07.05.23 11:35
голый скл прямо в коде

Как то не хочется, хоть и более эффективно. Хотя вроде уровень вложенности небольшой.

#13