我有一个想要排序的网格视图。我为它写了以下方法:
private void SortGridView(string sortExpression, string direction)
{
var constr = new AdminRequirementEF();
string sort = string.Concat("it.", sortExpression, " ", direction);
int pageSize = Convert.ToInt32(ddPageSize.SelectedItem.Text);
var results = constr.Projects;
int totalRecords = results.Count();
this.PopulatePager(totalRecords, pageIndex);
var sortedResults = constr.Projects.OrderBy(sort).Skip((pageIndex - 1) * pageSize).Take(pageNum).ToList();
grdMain.DataSource = sortedResults;
grdMain.DataBind();
}
问题是排序是应用于总记录而不是每页过滤记录。我想在应用skip和take之后使用OrderBy(sort)但是它给了我一个错误,说明在orderby子句之前不能应用skip。任何帮助将不胜感激。
答案 0 :(得分:1)
您可以获取按主键
排序的constr.Projects集合var results = constr.Projects.OrderBy(p => p.ProjectId)
然后应用跳过并带有排序的'结果'集合。
results = results.Skip((pageIndex - 1)* pageSize).Take(pageNum).OrderBy(sort).ToList();
这样您就可以根据需要获取特定页面的记录。