Как получить общее количество доступных строк из основного запроса ef с разбивкой на страницыC#

Место общения программистов C#
Ответить
Anonymous
 Как получить общее количество доступных строк из основного запроса ef с разбивкой на страницы

Сообщение Anonymous »

Заранее спасибо, что нашли время прочитать этот вопрос.
У меня есть представление в моей базе данных, назовем его 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'
Я сослался на этот ответ и попробовал использовать CTE, в результате чего мое мнение изменилось на использование такого запроса:

Код: Выделить всё

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
Но это не сработало, поскольку всегда возвращалось общее количество строк в cte1 без применения каких-либо фильтров.
Итак, я продолжил попытки создавать запросы для возврата общего количества строк после применения условий и обнаружил, что этот запрос работает:

Код: Выделить всё

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'
В настоящее время я пытаюсь реализовать тот же запрос с помощью EF Core, но не могу это реализовать.
Я пробовал реализовать решение представлено здесь, но, как следует из одного из комментариев, эта реализация больше не разрешена.
Я стараюсь избегать реализации, в которой я использую необработанный запрос. Можно ли как-нибудь получить результат от 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
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»