【问题标题】:Sorting Gridview with Entity Framework Not Working as Intended使用实体框架对 Gridview 进行排序未按预期工作
【发布时间】:2014-01-13 04:27:52
【问题描述】:

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

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

【问题讨论】:

  • 这是哪个 EF 版本?这应该没问题。生成的 SQL 是什么样的?

标签: asp.net entity-framework sorting gridview


【解决方案1】:

您可以让 constr.Projects 集合按其主键排序

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

然后应用跳过并通过排序处理“结果”集合。

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

这样您将获得按要求排序的特定页面的记录。

【讨论】:

  • 不,它不起作用,之前尝试过。我猜 Orderby(string value) 不能在 Skip-Take 之后应用。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-02-27
相关资源
最近更新 更多