Подтвердить что ты не робот

Выбор первых 10 записей, затем следующих 10, пейджинг с использованием Linq

Как выбрать первые 10 записей, Затем следующие 10, Затем следующие 10 и до тех пор, пока массив не закончится.

Phrases = bannersPhrases.Select(x=>x.Phrase).Take(10).ToArray()

Как получить следующие 10 записей?

4b9b3361

Ответ 1

var total = bannersPhrases.Select(p => p.Phrase).Count();
var pageSize = 10; // set your page size, which is number of records per page

var page = 1; // set current page number, must be >= 1

var skip = pageSize * (page-1);

var canPage = skip < total;

if (canPage) // do what you wish if you can page no further
   return;

Phrases = bannersPhrases.Select(p => p.Phrase)
             .Skip(skip)
             .Take(pageSize)
             .ToArray();

Ответ 2

Если вы выполняете пейджинг, и вы просто хотите перейти на конкретную страницу, вы можете использовать Skip и Take, как описано в некоторых других ответах. Однако, если вы хотите группировать всю последовательность в куски определенного размера, вы можете использовать GroupBy вместо этого. Вот небольшой пример:

var groupSize = 4;
// The characters 'a' - 'z'.
var source = Enumerable.Range(0, 26).Select(i => (Char) ('a' + i));
var groups = source
  .Select((x, i) => new { Item = x, Index = i })
  .GroupBy(x => x.Index/groupSize, x => x.Item);
foreach (var group in groups)
  Console.WriteLine("{0}: {1}", group.Key, String.Join(", ", group));

Вывод:

0: a, b, c, d
1: e, f, g, h
2: i, j, k, l
3: m, n, o, p
4: q, r, s, t
5: u, v, w, x
6: y, z

Ответ 3

Вы можете использовать .Skip(). Это вернет следующие 10 элементов:

 Phrases = bannersPhrases.Select(x=>x.Phrase).Skip(10).Take(10).ToArray()

Ответ 4

Вы можете использовать Пропустить метод расширения

Phrases = bannersPhrases.Select(x=>x.Phrase).Skip(10).Take(10).ToArray()