применение нумерации страниц к подколлекции - PullRequest
0 голосов
/ 18 июня 2020

Как применить разбиение на страницы к подколлекции. Ниже представлена ​​структура. Требование заключается в том, что когда я устанавливаю ограничение на количество страниц до 10, если детали в SampleDataSet содержат более 10 записей, тогда должны отображаться только первые 10 записей. Поэтому, когда я применяю разбиение на страницы, как показано ниже

listSampleDataSet = listSampleDataSet .Skip(pageIndex).Take(pageSize);

, он вернет 10 SampleDataSet, как применить разбиение на страницы, чтобы он возвращал только один SampleDataSet, потому что коллекция Details в нем содержит более 10 записей.

Пример:

public class SampleDataSet
{
   int id {get;set;}
   int name {get;set;}
   List<DetailsDataSet> Details {get;set;}
}

 List<SampleDataSet> listSampleDataSet = new List<SampleDataSet>();
listSampleDataSet = listSampleDataSet .Skip(pageIndex).Take(pageSize);

Он вернет 10 SampleDataSet, что является правильным, поскольку разбиение на страницы применено к основной коллекции, как применить разбиение на страницы, чтобы он возвращал только один SampleDataSet, потому что коллекция Details в нем получила более 10 записей.

Очень признателен за вашу помощь.

Ответы [ 2 ]

1 голос
/ 18 июня 2020

Попробуйте использовать Skip и Take .

int pageSize = 10;
int pageNum = 1;
listSampleDataSet.Skip(pageSize * pageNum).Take(pageSize);
0 голосов
/ 18 июня 2020

Если у вас есть доступ к коллекции root из DetailsDataSet, вы можете:

  1. Использовать объединение вместо свойств навигации
  2. Изменить направление получения данных: означает, что вы должны иметь DetailsDataSet в качестве основной коллекции, отфильтрованной по идентификатору parrent (в случае, если вы показываете указанный объект c SampleDataSet) и применяете разбиение на страницы.

В противном случае переместите функцию разбиения на страницы в SampleDataSet создает функцию / свойство, которое предоставит вам следующую страницу с подробностями (а также предыдущую) с сохранением состояния в самом объекте

public class SampleDataSet
{
   public int id { get; set; }
   public int name { get; set; }
   public List<DetailsDataSet> Details { get; set; }

   private int page = 0;
   private int pageSize = 10;

   public bool HasNextPage() => Details.Count > pageSize * (page + 1);   
   public IEnumerable<DetailsDataSet> GetNextPage() => Details.Skip(pageSize * page++).Take(pageSize);
    // etc...
}
...