PagedList usando LINQ Skip and Take, pero muestra la paginación usando Count of results

Estoy tratando de mostrar una lista filtrada de productos, basada en el filtro de Categoría y en ItemsPerPage, pero tengo algunos problemas al intentar usarlo con PagedList.

Alguien con experiencia en PagedList podría aconsejarme si necesito escribir mi propio código de paginación o si hay una manera de obtener los resultados que necesito usando PagedList.

Estoy usando las funciones Saltar y Tomar de LINQ para obtener solo el número de filas que se deben mostrar en la página actual, pero aún así me gustaría que los enlaces de paginación muestren páginas según el recuento total del filtro.

P.ej.: mi filtro de búsqueda encuentra 50 resultados, pero como mis filas por página son, por ejemplo, 10 elementos, uso Skip () y Take () de LINQ para recuperar solo 10 filas. Todavía necesito mostrar en mi View.cshtml los enlaces de la página<< 1 | 2 | 3 | 4 | 5 >> Ahora mismo, con PagedList por defecto, solo obtengo<< 1 >>, Sé por qué solo veo una página, pero solo quería saber cómo puedo hacer que funcione para mostrar la cantidad correcta de enlaces de página, mientras que solo obtengo un subconjunto de resultados.

** Mi objetivo es escribir consultas optimizadas en la base de datos para que el rendimiento de respuesta de la página web sea rápido.

Aquí es cómo se ve mi código para el Método de Acción. El código está obteniendo los resultados correctos, pero la paginación no funciona, ya que necesito que sea:

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));
}

Aquí está el fragmento de código de la Vista que se ocupa de la paginación. Busqué en el sitio de Github del proyecto, pero no pude encontrar un método de extensión para proporcionar páginas personalizadas. Creo que solo representará el número de páginas basadas en 'elementos por página' y el recuento () de productos en @Model:

@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>

Respuestas a la pregunta(5)

Su respuesta a la pregunta