We help IT Professionals succeed at work.

ASP.NET MVC PagedList.Mvc error  - The method 'OrderBy' must be called before the method 'Skip'.'

Intelli-Seeker
on
233 Views
Last Modified: 2018-10-10
I am using ASP.NET MVC 5 with entity framework version 6. I have the PagedList.MVC nuget package installed. I get the error listed below when attempting to sort in my Index view. I'm sure it is something really simple that I am overlooking.

The method 'Skip' is only supported for sorted input in LINQ to Entities. The method 'OrderBy' must be called before the method 'Skip'.'

Controller Code listed below:

using System;
using System.Collections.Generic;
using System.Data;
using System.Data.Entity;
using System.Linq;
using System.Net;
using System.Web;
using System.Web.Mvc;
using ITRA.Models;
using PagedList;
using PagedList.Mvc;

namespace ITRA.Controllers
{
    public class SSP_ControlController : Controller
    {
        private RiskAssessmentEntities2 db = new RiskAssessmentEntities2();

        // GET: SSP_Control
        public ViewResult Index(string sortOrder, string currentFilter, string searchString, int? page)
        {
            ViewBag.CurrentSort = sortOrder;
            ViewBag.NISTIDSortParm = String.IsNullOrEmpty(sortOrder) ? "NISTID_asc" : "";
            ViewBag.TitleSortParm = String.IsNullOrEmpty(sortOrder) ? "Title_asc" : "";
            ViewBag.WorksheetStatementSortParm = String.IsNullOrEmpty(sortOrder) ? "WorksheetStatement_asc" : "";

            if (searchString != null)
            {
                page = 1;
            }
            else
            {
                searchString = currentFilter;
            }
            ViewBag.CurrentFilter = searchString;

            var NISTID = from NID in db.SSP_Control
                      select NID;
            var Title = from t in db.SSP_Control
                      select t;
            var WorksheetStatement = from ws in db.SSP_Control
                        select ws;
            if (!String.IsNullOrEmpty(searchString))
            {
                NISTID = NISTID.Where(NID => NID.NISTID.Contains(searchString));               
            }
            switch (sortOrder)
            {
                case "NISTID_asc":
                    NISTID = NISTID.OrderBy(NID => NID.NISTID);
                    break;
                case "Title_asc":
                    Title = Title.OrderBy(t => t.Title);
                    break;
                case "WorksheetStatement_asc":
                    WorksheetStatement = WorksheetStatement.OrderBy(ws => ws.WorksheetStatement);
                    break;
                default:
                    NISTID = NISTID.OrderBy(NID => NID.NISTID);
                    break;
            }
            int pageSize = 10;
                int pageNumber = (page ?? 1);
            return View(NISTID.ToPagedList(pageNumber, pageSize));

Open in new window


Index View code listed below:

@model PagedList.IPagedList<ITRA.Models.SSP_Control>
@using PagedList.Mvc;
@using PagedList;
<link href="~/Content/PagedList.css" rel="stylesheet" type="text/css" />

@{
    ViewBag.Title = "SSP Controls";
}

<h2>SSP Controls</h2>

<p>
    @Html.ActionLink("Create New", "Create")
</p>

@using (Html.BeginForm("Index", "SSP_Control", FormMethod.Get))
{
    <p>
        Search: @Html.TextBox("SearchString", ViewBag.CurrentFilter as string)
        <input type="submit" value="Search" />
    </p>
}
<table class="table">
    <tr>
        <th>
            @Html.ActionLink("NIST ID", "Index", new { sortOrder = ViewBag.NISTIDSortParm, currentFilter = ViewBag.CurrentFilter })
        </th>
        <th>
            @Html.ActionLink("Title", "Index", new { sortOrder = ViewBag.TitleSortParm, currentFilter = ViewBag.CurrentFilter })
        </th>
        <th>
            @Html.ActionLink("Worksheet Statement", "Index", new { sortOrder = ViewBag.WorksheetStatementSortParm, currentFilter = ViewBag.CurrentFilter })
        </th>
        <th>
            @Html.ActionLink("Control Requirement", "Index")
        </th>
    </tr>

    @foreach (var item in Model)
    {
        <tr>
            <td>
                @Html.DisplayFor(modelItem => item.NISTID)
            </td>
            <td>
                @Html.DisplayFor(modelItem => item.Title)
            </td>
            <td>
                @Html.DisplayFor(modelItem => item.WorksheetStatement)
            </td>
            <td>
                @Html.DisplayFor(modelItem => item.ControlRequirement)
            </td>
            <td>
                @Html.ActionLink("Edit", "Edit", new { id = item.ID }) |
                @Html.ActionLink("Details", "Details", new { id = item.ID }) |
                @Html.ActionLink("Delete", "Delete", new { id = item.ID })
            </td>
        </tr>
    }
</table>
<br />
Page @(Model.PageCount < Model.PageNumber ? 0 : Model.PageNumber) of @Model.PageCount
@Html.PagedListPager(Model, page => Url.Action("Index", new { page, sortOrder = ViewBag.CurrentSort, currentFilter = ViewBag.CurrentFilter }))

Open in new window

Comment
Watch Question

CERTIFIED EXPERT
Commented:
This one is on us!
(Get your first solution completely free - no credit card required)
UNLOCK SOLUTION

Author

Commented:
Thanks! You solved hours of scouring the Internet to find the right answer. I really appreciate the fast response. You solved my problem!
CERTIFIED EXPERT

Commented:
No problem, glad to help!
Unlock the solution to this question.
Join our community and discover your potential

Experts Exchange is the only place where you can interact directly with leading experts in the technology field. Become a member today and access the collective knowledge of thousands of technology experts.

*This site is protected by reCAPTCHA and the Google Privacy Policy and Terms of Service apply.

OR

Please enter a first name

Please enter a last name

8+ characters (letters, numbers, and a symbol)

By clicking, you agree to the Terms of Use and Privacy Policy.