Нумерация страниц, вероятно, будет сопровождаться динамической фильтрацией и сортировкой.Чистый способ справиться с ситуацией - заключить в один класс весь набор результатов и связанные метаданные (размер страницы, номер текущей страницы и т. Д.). 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);
Этот подход сокращает код, который необходимо написать, не влияя на производительность.Подробный пример: здесь в ссылке.