使用实体框架排序Gridview不能按预期工作

时间:2013-12-25 04:58:23

标签: asp.net entity-framework sorting gridview

我有一个想要排序的网格视图。我为它写了以下方法:

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。任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:1)

您可以获取按主键

排序的constr.Projects集合

var results = constr.Projects.OrderBy(p => p.ProjectId)

然后应用跳过并带有排序的'结果'集合。

results = results.Skip((pageIndex - 1)* pageSize).Take(pageNum).OrderBy(sort).ToList();

这样您就可以根据需要获取特定页面的记录。