Получить общее количество записей при разбивке на страницы - PullRequest
11 голосов
/ 05 января 2010

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

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

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

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

Ответы [ 2 ]

19 голосов
/ 05 января 2010

Чтобы получить общее количество записей перед пропуском / получением, вам нужно выполнить отдельный запрос. Получение действительного возвращенного числа будет использовать 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();
11 голосов
/ 05 января 2010

Итог: вам нужно выполнить два запроса. Вы просто не можете обойти это.

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

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