0 / 0 / 0
Регистрация: 22.05.2017
Сообщений: 36

EF NET CORE Использование результата хранимой процедуры как поле в запросе к таблице

05.12.2025, 09:58. Показов 565. Ответов 14
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Есть унаследованный запрос

SQL
1
SELECT t.id,(SELECT anything FROM anyprocedure(t.id))  FROM anytable t
Для каждого id процедура возвращает только одно значение.

Как реализовать этот запрос в EF NET CORE?
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
05.12.2025, 09:58
Ответы с готовыми решениями:

Разница между ASP.NET Core 2, ASP.NET Core MVC, ASP.NET MVC 5 и ASP.NET WEBAPI 2
Здравствуйте. Я в бекенд разработке полный ноль. В чем разница между вышеперечисленными...

EF NET CORE Можно ли использовать запрос выборки данных из хранимой процедуры как результат поля основного запроса?
есть sql запрос: select field1, (select myfield from myprocedure(mytable.id)) as field2 from...

Получение объекта из хранимой процедуры с использованием EF Core
Добрый день. Хранимая процедура выводит объект (json) в единственном текстовом поле. Используя...

14
 Аватар для Andrey-MSK
3319 / 2206 / 387
Регистрация: 14.08.2018
Сообщений: 7,416
Записей в блоге: 4
05.12.2025, 10:11
Цитата Сообщение от sijuiem Посмотреть сообщение
SQL
1
SELECT anything FROM anyprocedure(t.id)
А это точно работает? Или anyprocedure это не хранимка?
SELECT вызывается на UDF, View, Table. Хранимки вызываются через EXEC.
0
0 / 0 / 0
Регистрация: 22.05.2017
Сообщений: 36
05.12.2025, 10:16  [ТС]
Цитата Сообщение от Andrey-MSK Посмотреть сообщение
А это точно работает? Или anyprocedure это не хранимка?
Хранимка. Точно работет. Firebird
0
 Аватар для Andrey-MSK
3319 / 2206 / 387
Регистрация: 14.08.2018
Сообщений: 7,416
Записей в блоге: 4
05.12.2025, 10:20
Цитата Сообщение от sijuiem Посмотреть сообщение
Firebird
Уточнять нужно.

Добавлено через 18 секунд
Все СУБД ведут себя по разному...

Добавлено через 1 минуту
sijuiem, А вообще, вызов хранимки в SELECT для расчёта на каждой записи - это конечно жесть...
0
0 / 0 / 0
Регистрация: 22.05.2017
Сообщений: 36
05.12.2025, 10:24  [ТС]
Цитата Сообщение от Andrey-MSK Посмотреть сообщение
А вообще, вызов хранимки в SELECT для расчёта на каждой записи - это конечно жесть
Кто сказал что для каждой записи?
К таблице (в данном примере это не показано) применяется предложение where и подсчет идет только для этих записей.
Если бы была возможность логику процедуры реализовать в виде подзапроса... но это не реально.

Кратко логика процедуры заключается в определении вхождения в период родительской записи истории изменения периодов действия дочерних записей
Типа есть помещение и есть периоды проживания жильцов, но у жильцов есть свои периоды временного отсутствия. Так вот данный запрос определяет сколько жильцов реально проживало в определенный период.
Мы можем выбрать все помещения дома и знать сколько жильцов проживало в определенный день, месяц и т.п.
(В примере запроса для упрощения убрано все что касается параметров задания периодов и т.п.)
0
 Аватар для Andrey-MSK
3319 / 2206 / 387
Регистрация: 14.08.2018
Сообщений: 7,416
Записей в блоге: 4
05.12.2025, 10:29
Цитата Сообщение от sijuiem Посмотреть сообщение
Кто сказал что для каждой записи?
Потому что SELECT считает каждую запись в выборке. Будь там их тысяча или одна...
Нужно было делать через UDF (это View с параметрами) и JOIN. Вот тогда расчёт будет произведён один раз и таблицы соединятся, а дальше SELECT уже быстро всё сделает.
0
0 / 0 / 0
Регистрация: 22.05.2017
Сообщений: 36
05.12.2025, 11:07  [ТС]
Цитата Сообщение от Andrey-MSK Посмотреть сообщение
Потому что SELECT считает каждую запись в выборке. Будь там их тысяча или одна...
Цитата Сообщение от Andrey-MSK Посмотреть сообщение
Нужно было делать через UDF (это View с параметрами) и JOIN. Вот тогда расчёт будет произведён один раз и таблицы соединятся, а дальше SELECT уже быстро всё сделает.
Однако это не относится к теме вопроса. Мы идем не туда.
Мне надо реализовать запрос в EF, а не менять структуру базы.
0
 Аватар для Andrey-MSK
3319 / 2206 / 387
Регистрация: 14.08.2018
Сообщений: 7,416
Записей в блоге: 4
05.12.2025, 11:13
Цитата Сообщение от sijuiem Посмотреть сообщение
Однако это не относится к теме вопроса. Мы идем не туда.
Это относится к теме производительности. Если сделать как надо, то тогда и в EF будет перевести гораздо проще, так как составные части запроса будут просто выборкой. Но дело ваше...
0
0 / 0 / 0
Регистрация: 22.05.2017
Сообщений: 36
05.12.2025, 11:37  [ТС]
Цитата Сообщение от Andrey-MSK Посмотреть сообщение
Если сделать как надо
Если делать как надо - понятие относительное.
В Firebird нет View с параметрами. )
0
 Аватар для Andrey-MSK
3319 / 2206 / 387
Регистрация: 14.08.2018
Сообщений: 7,416
Записей в блоге: 4
05.12.2025, 11:41
Цитата Сообщение от sijuiem Посмотреть сообщение
В Firebird нет View с параметрами. )
Уверены? 5.9. FUNCTION

Добавлено через 2 минуты
UDF - User Defined Function
0
0 / 0 / 0
Регистрация: 22.05.2017
Сообщений: 36
05.12.2025, 11:48  [ТС]
Цитата Сообщение от Andrey-MSK Посмотреть сообщение
Это относится к теме производительности
Хорошая тема, но я не просил как сделать производительнее, мне просто нужно решение именно моей проблемы.
К слову сказать корявенькое решение у меня есть, но оно мне не нравится, поскольку необходимо в качестве результата процедуры использовать одно из существующих полей таблицы таблицы запроса.

Добавлено через 6 минут
Цитата Сообщение от Andrey-MSK Посмотреть сообщение
Уверены? 5.9. FUNCTION
View возвращает результат запроса, а это возвращает скалярное значение.
Совсем не то. В Firebird View c параметрами это и есть хранимая процедура.
Сними также можно строить джоины к таблицам, просто в данном случае джоин построить нельзя, т.к. процедура не возвращает полей для возможного соединения.
0
 Аватар для Andrey-MSK
3319 / 2206 / 387
Регистрация: 14.08.2018
Сообщений: 7,416
Записей в блоге: 4
05.12.2025, 11:55
Цитата Сообщение от sijuiem Посмотреть сообщение
т.к. процедура не возвращает полей для возможного соединения.
А кто мешает написать новую, которая будет возвращать что надо?
Цитата Сообщение от sijuiem Посмотреть сообщение
а это возвращает скалярное значение
Согласен, не дочитал доку, там только скаляр...
0
0 / 0 / 0
Регистрация: 22.05.2017
Сообщений: 36
05.12.2025, 12:03  [ТС]
Цитата Сообщение от Andrey-MSK Посмотреть сообщение
А кто мешает написать новую, которая будет возвращать что надо?
Этот вариант рассматривается как крайний.

Стараемся как можно меньше вносить изменения в структуру базы, если что то можно решить без этого, т.к. это влечет реструктуризацию у клиентов, что связано с некоторыми накладными расходами.
0
Эксперт .NET
 Аватар для Wolfdp
3790 / 1767 / 371
Регистрация: 15.06.2012
Сообщений: 6,543
Записей в блоге: 3
05.12.2025, 14:23
Цитата Сообщение от sijuiem Посмотреть сообщение
SQL
1
SELECT t.id,(SELECT anything FROM anyprocedure(t.id))  FROM anytable t
Если нужно только id + результат процедуры, то с таким же успехом на уровне кода можно через foreach пнуть нужное количество раз вызовов SP с параметром. Не думаю что будет радикально медленее.

Если таки очень хочеться чтобы ORM выдавала это как свойство, то можно запихнуть его расчётное, с ленивой подгрузкой (или нет). Я бы копал в эту сторону (вру, я бы написал новую SP возвращающую нужное).
0
 Аватар для IamRain
4694 / 2702 / 734
Регистрация: 02.08.2011
Сообщений: 7,228
20.12.2025, 15:19
Цитата Сообщение от Andrey-MSK Посмотреть сообщение
sijuiem, А вообще, вызов хранимки в SELECT для расчёта на каждой записи - это конечно жесть...
Пойдет, в том же SQL Server-е можно делать cross apply/left outer apply, тоже самое.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
20.12.2025, 15:19
Помогаю со студенческими работами здесь

Entity Framework Core | Хранимые процедуры
как вызывать хранимые процедуры на C# через Entity Framework Core с помощью функции Fromsql....

Обращение к хранимым процедурам и функциям из Entity Framework Core
Вот сама БД CREATE DataBase CarLibrary GO USE CarLibrary GO CREATE TABLE Types

Как получить результат хранимой процедуры MSSQL?
Делаю так: Set cm=Server.CreateObject("ADODB.Command") Set cm.ActiveConnection = conn ...

Хранимые процедуры, запрос к нескольким таблицам
Поясните кто может, как правильно сделать, есть несколько таблиц (классификатор стран мира,...

Мастер настройки запроса и хранимая процедура с возвращаемой временной таблицей
Доброго времени суток всем! Имеется у меня хранимая процедура. В ней вытаскиваются из нескольких...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Опции темы

Новые блоги и статьи
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
Первый деплой
lagorue 16.01.2026
Не спеша развернул своё 1ое приложение в kubernetes. А дальше мне интересно создать 1фронтэнд приложения и 2 бэкэнд приложения развернуть 2 деплоя в кубере получится 2 сервиса и что-бы они. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь постоянного тока с R, L, C, k(ключ), U, E, J. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа, решает её и находит: токи, напряжения и их 1 и 2 производные при t = 0;. . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Изучаю kubernetes
lagorue 13.01.2026
А пригодятся-ли мне знания kubernetes в России?
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru