У меня есть представление в моей базе данных, назовем его Members_VW
В моем .net 5 API, я пытаюсь получить ответ с разбивкой по страницам для списка участников из представления с параметрами поиска. Мне также нужно вернуть общее количество ответов для внешнего интерфейса, чтобы узнать, на скольких страницах будут возвращены результаты.
В настоящее время Members_VW создается с помощью запроса типа:
В настоящее время Members_VW создается с помощью запроса типа:
р>
Код: Выделить всё
select
col1, col2, col3
from
table1 1
inner join table2 2 on 1.key = 2.key
inner join tble3 3 on 3.key = 2.key
where
defaultcondition1 = '1'
and
defaultcondition2 = '2'
Код: Выделить всё
with cte1 as (
select
col1, col2, col3
from
table1 1
inner join table2 2 on 1.key = 2.key
inner join tble3 3 on 3.key = 2.key
where
defaultcondition1 = '1'
and
defaultcondition2 = '2')
cte2 as (
select count(*) over() from cte1 )
select
*
from
cte1, cte2
Итак, я продолжил попытки создавать запросы для возврата общего количества строк после применения условий и обнаружил, что этот запрос работает:
Код: Выделить всё
select
col1, col2, col3, count(*) over()
from
table1 1
inner join table2 2 on 1.key = 2.key
inner join tble3 3 on 3.key = 2.key
where
defaultcondition1 = '1'
and
defaultcondition2 = '2'
Я пробовал реализовать решение представлено здесь, но, как следует из одного из комментариев, эта реализация больше не разрешена.
Я стараюсь избегать реализации, в которой я использую необработанный запрос. Можно ли как-нибудь получить результат от count(*) over() без использования необработанного запроса?
Моя текущая реализация:
Код: Выделить всё
IQueryable membersQuery = _context.MembersVW;
membersQuery = membersQuery.Where(u => u.MemberId == memberid);
membersQuery = membersQuery.OrderBy(m => m.MemberId).Skip(page * size).Take(size);
Код: Выделить всё
membersQuery = membersQuery.Count()Код: Выделить всё
Error CS0029 Cannot implicitly convert type 'int' to 'System.Linq.IQueryable
'
Подробнее здесь: https://stackoverflow.com/questions/684 ... core-query
Мобильная версия