Получить общее количество записей при разбиении на страницы

Чтобы получить страницу из базы данных, я должен выполнить что-то вроде этого:

var cs = ( from x in base.EntityDataContext.Corporates
   select x ).Skip( 10 ).Take( 10 );

Это пропустит первые 10 строк и выберет следующие 10.

Как узнать, сколько строк будет получено из-за запроса без разбивки на страницы? Я не хочу запускать другой запрос, чтобы получить счет.

Ответ 1

Чтобы получить общее количество записей перед пропуском/взятием, вам нужно запустить отдельный запрос. Получение возвращаемого фактического числа будет использовать Count(), но не приведет к другому запросу, если исходный запрос был реализован.

var q = from x in base.EntityDataContext.Corporates 
        select x;

var total = q.Count();
var cs = q.Skip(10).Take(10);
var numberOnSelectedPage = cs.Count();

Ответ 2

Нижняя строка: вам нужно запустить два запроса. Вы просто не можете обойти это.

Здесь хороший способ сделать это, чтобы кэшировать исходный запрос и фильтр LINQ, делая меньше ошибок копирования/вставки:

var qry = from x in base.EntityDataContext.Coporates select x;
var count = qry.Count();
var items = qry.Skip(10).Take(10).ToList();