2015-03-29 2 views
2

У меня есть сценарий, в котором я должен получить разбитые на страницы записи в обратном порядке с помощью LINQ. Давайте предположим, что у меня есть 15 пунктов в порядке их размещения:Обратный пейджинг с использованием Linq

1, 2, 3, 4, 5.......... 15 

Имея размер страниц 5, если пользователь посылает 1 в качестве currentPage в моем методе. Тогда я должен был бы вернуть 11, 12, 13, 14, 15 в качестве результата, если он отправит 2 в качестве currentPage, тогда я должен вернуть 6, 7, 8, 9, 10 и так далее. Как установить значение, которое я передаю методу Skip, чтобы он дал мне записи таким образом? И да, я заказываю предметы в порядке возрастания по датам.

ответ

4

Просто простой пример логики:

var nums = new[] {1, 2, 3, ..., 15}; 

var lastFew = nums.Reverse().Take(5).Reverse().ToArray(); 

или в качестве альтернативы, в виде списка:

var nums = new List<int> { 1, 2, 3, ..., 15}; 
nums.Reverse(); 
nums.RemoveRange(5); // removes from index 5 till end 
nums.Reverse(); 

Фактическая реализация может варьироваться в зависимости от того, как код предназначен, и т.д., но это вы должны начать.

Ключевыми методами использования здесь являются: Reverse, Take, чтобы ограничить возвращенную сумму, и Skip, чтобы выбрать начальный индекс. Если вы используете Skip, вы, скорее всего, вообще избегаете использования Reverse.

0

Я хотел бы сделать, как это (с использованием EF):

var resultByDesc = db.Entities 
        .OrderByDescending(o => o.DateTime) 
        .Skip(page * itemsPerPage) 
        .Take(itemsPerPage) 
        .ToList(); // important! eager loading! 
// it will be executed in your client side, not SQL. 
var actualResult = resultByDesc.Reverse(); 
Смежные вопросы