разбиение на страницы в сущности framerowk - PullRequest
2 голосов
/ 24 сентября 2010

Какова лучшая практика для нумерации страниц в рамках Entity?Должен ли один попадать в базу данных дважды, один для получения общего количества записей и второй для получения записей?Заранее спасибо.

Ответы [ 2 ]

2 голосов
/ 25 сентября 2010

Одним из решений будет использование запроса LINQ, в котором используются операторы Skip и Take.

Пример - Страница 1:

someObject.Skip(0).Take(10)

Пример - Страница 2:

someObject.Skip(10).Take(10)

Затем вы можете определить переменную размера страницы и использовать ее в качестве параметра для операторов Take и Skip (page size variable * (page number - 1)).

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

0 голосов
/ 27 апреля 2017

Нумерация страниц, вероятно, будет сопровождаться динамической фильтрацией и сортировкой.Чистый способ справиться с ситуацией - заключить в один класс весь набор результатов и связанные метаданные (размер страницы, номер текущей страницы и т. Д.). EntityFrameworkPaginate представляет собой пакет nuget, который обеспечивает элегантное решение для нумерации страниц.Итак, как это работает, вы настраиваете динамическую фильтрацию и сортировку, и в результате вы получите объект Page , который будет иметь результат вместе с метаданными.(CurrentPage, PageCount, PageSize, RecordCount и Results).

Если у вас есть динамические фильтры, основанные на отдельных условиях, вы можете создать объект Filters.Добавьте выражение фильтра и условие для объекта фильтра.

 var filters = new Filters<Employee>(); 
 filters.Add(!string.IsNullOrEmpty(searchText), x => x.LoginID.Contains(searchText));
 filters.Add(!string.IsNullOrEmpty(jobTitle), x => x.JobTitle.Equals(jobTitle));

Аналогичным образом настройте динамическую сортировку в объекте Сортировка .

 var sorts = new Sorts<Employee>();
 sorts.Add(sortBy == 1, x => x.BusinessEntityID);
 sorts.Add(sortBy == 2, x => x.LoginID, true);

Теперь вызовитеметод расширения Paginate в вашем наборе БД для получения разбитых на страницы результатов.

 context.Employees.Paginate(currentPage, pageSize, sorts, filters);

Этот подход сокращает код, который необходимо написать, не влияя на производительность.Подробный пример: здесь в ссылке.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...