Czołem,
Chcę zrobić paginację wyświetlanych rekordów, lecz nie wiem jak rozwiązać pewną rzecz.
Otóż na jednej stronie wyświetlam pewną daną liczbę elementów, więc na logikę powinienem pobrać z bazy tą określoną liczbę rekordów. Lecz pobranie tylko tych danych, które chcę wyświetlać sprawia, że nie mam informacji odnośnie wszystkich dostępnych rekordów (co wpływa na ilość dostępnych stron listy).
Czy powinienem pobrać wszystkie rekordy i wtedy odpowiednio policzyć liczbę stron czy rozwiązać to jeszcze na jakiś inny sposób?
private IQueryable<Category> GetCategories(string name)
{
IQueryable<Category> categories;
if (!string.IsNullOrEmpty(name))
categories = context.Categories.Where(x => x.Name.ToLower().Contains(name.ToLower()));
else
categories = context.Categories;
return categories;
}
public CategoryListViewModel GetCategoryListViewModel(string name, int? page, int pageSize)
{
var categories = GetCategories(name);
var pageNumber = page ?? 1;
var viewModel = new CategoryListViewModel()
{
Name = name,
Page = pageNumber,
Categories = categories.OrderBy(x => x.Id).Skip(pageSize * (pageNumber - 1)).Take(pageSize).ProjectTo<CategoryListItemViewModel().ToList(),
TotalPages = GetTotalPages(categories, pageSize)
};
return viewModel;
}
private int GetTotalPages(IEnumerable<Category> categories, int pageSize)
{
var quantity = categories.Count();
return Convert.ToInt32(Math.Ceiling((decimal)quantity / (decimal)pageSize));
}