PagedList używa LINQ Skip and Take, ale wyświetla stronicowanie przy użyciu Count of results

Próbuję wyświetlić przefiltrowaną listę produktów, w oparciu o filtr kategorii i ItemsPerPage, ale mam pewne problemy podczas próby użycia go z PagedList.

Ktoś z doświadczeniem w PagedList może mi doradzić, czy muszę napisać własny kod paginacji, czy też istnieje sposób na uzyskanie potrzebnych wyników przy użyciu PagedList.

Korzystam z funkcji pomijania i pobierania LINQ, aby uzyskać tylko liczbę wierszy, które muszą być wyświetlane na bieżącej stronie, ale nadal chciałbym, aby linki stronicowania wyświetlały strony na podstawie całkowitej liczby filtrów.

Na przykład.: mój filtr wyszukiwania znajduje 50 wyników, ale ponieważ moje wiersze na stronie to 10 elementów, używam funkcji Pomiń () i Take () LINQ, aby uzyskać tylko 10 wierszy wstecz. Nadal muszę pokazać w moim View.cshtml linki do strony<< 1 | 2 | 3 | 4 | 5 >> Teraz z domyślną listą PagedList, otrzymuję tylko<< 1 >>, Wiem, dlaczego widzę tylko jedną stronę, ale chciałem tylko wiedzieć, jak sprawić, by działało, aby pokazać prawidłową liczbę linków do stron, a jednocześnie uzyskać tylko podzbiór wyników.

** Moim celem jest pisanie zoptymalizowanych zapytań do Bazy Danych, aby szybkość reakcji strony internetowej była wysoka.

Oto jak wygląda mój kod metody akcji. Kod uzyskuje poprawne wyniki, ale paginacja nie działa tak, jak powinna być:

public ViewResult List(int page =1, string category =null)
{
    if (category != null) this.CurrentCategory = category;

    var products = repository.Products
                    .Where(p => this.CurrentCategory == null || p.Category == this.CurrentCategory)
                    .OrderBy(p => p.ProductID)
                    .Skip((page -1) * PageSize)
                    .Take(PageSize);

    return View(products.ToList().ToPagedList(page, PageSize));
}

Oto fragment kodu z widoku, który zajmuje się podziałem na strony. Przejrzałem witrynę Github w projekcie, ale nie mogłem znaleźć metody rozszerzenia, aby udostępnić strony niestandardowe. Myślę, że renderuje tylko liczbę stron na podstawie „elementów na stronie” i liczby () produktów w @Modelu:

@model IPagedList<Product>

//foreach loop that renders the @Model

//Code that displays the pagination using PagedList
<div style="text-align:center">
    @Html.PagedListPager(Model, page => Url.Action("List", new { page = page, category =  ViewBag.CurrentCategory }), PagedListRenderOptions.OnlyShowFivePagesAtATime
    )
</div>

questionAnswers(5)

yourAnswerToTheQuestion