C# 分页错误:方法';跳过';仅支持LINQ to实体中的排序输入。方法';订购人';必须在方法';跳过';
我有以下代码。我没有使用排序,只是过滤或搜索信息。我也没有使用skip方法。请参阅下面的代码C# 分页错误:方法';跳过';仅支持LINQ to实体中的排序输入。方法';订购人';必须在方法';跳过';,c#,asp.net-mvc,C#,Asp.net Mvc,我有以下代码。我没有使用排序,只是过滤或搜索信息。我也没有使用skip方法。请参阅下面的代码 public ActionResult Index(string currentFilter=null, string search=null, string searchBy=null, int? page=1) { var student = from d in db.Student_vw where d.is_active ==
public ActionResult Index(string currentFilter=null, string search=null, string searchBy=null, int? page=1)
{
var student = from d in db.Student_vw
where d.is_active == true
select d;
if (searchBy == "default")
{
student = student.OrderByDescending(x => x.ID_Number);
}
//searching of an item
if (!String.IsNullOrEmpty(search))
{
student = student.Where(x => x.ID_Number.Contains(search) || x.student_fname.Contains(search)
|| x.student_lname.Contains(search) || x.section_name.Contains(search) || x.course_name.Contains(search)
|| x.student_address.Contains(search) || x.batch_name.Contains(search) || x.adviser_fname.Contains(search) || x.adviser_lname.Contains(search) || x.student_email_add.Contains(search));
}
else {
student = student.OrderByDescending(x => x.ID_Number);
}
ViewBag.CurrentFilter = search;
int pageSize = 25;
int pageNumber = (page ?? 1);
var returnMe = student.ToPagedList(pageNumber, pageSize);
return View(returnMe);
}
提前感谢您的帮助。@Jen-您需要在代码中使用OrderBy before student.ToPageList(pageNumber,pageSize)当搜索有值时,学生不需要排序。按以下步骤做
public ActionResult Index(string currentFilter=null, string search=null, string searchBy=null, int? page=1)
{
var student = from d in db.Student_vw
where d.is_active == true
select d;
//if (searchBy == "default")
//{
// student = student.OrderByDescending(x => x.ID_Number);
//}
//searching of an item
if (!String.IsNullOrEmpty(search))
{
student = student.Where(x => x.ID_Number.Contains(search) || x.student_fname.Contains(search)
|| x.student_lname.Contains(search) || x.section_name.Contains(search) || x.course_name.Contains(search)
|| x.student_address.Contains(search) || x.batch_name.Contains(search) || x.adviser_fname.Contains(search) || x.adviser_lname.Contains(search) || x.student_email_add.Contains(search));
}
//else {
// student = student.OrderByDescending(x => x.ID_Number);
//}
ViewBag.CurrentFilter = search;
int pageSize = 25;
int pageNumber = (page ?? 1);
var returnMe = student.OrderByDescending(x => x.ID_Number).ToPagedList(pageNumber, pageSize);
return View(returnMe);
}
SQL不能保证结果的顺序,除非你给它一个order by,所以在没有order by的情况下使用Take或Skip(PagedList内部是这样做的)没有任何逻辑意义,理论上每次都会给你完全不同的结果
您编写逻辑的方式可能会失败,而无需每次点击order by语句。ToPagedList使用Skip,您需要按照异常消息的说明首先对结果进行排序。