【问题标题】:DevExpress MVC GridView BindToLINQ() Selects Too Much DataDevExpress MVC GridView BindToLINQ() 选择了太多数据
【发布时间】:2012-02-20 11:42:19
【问题描述】:

使用 devexpress gridview 的 bindtoLINQ 功能时,它会查询整个表集而不是客户端正在查看的页面。

IE。使用 SQL Server Profiler,我们看到它选择了表中 200k+ 行的所有列,而不仅仅是预期的 10 个。

视图如下所示:

@Html.DevExpress().GridView(...).BindToLINQ("MyProject.Models.DBEntities", "myTable", (s, e) => { e.KeyExpression = "row_id"; }).GetHtml()

网格在客户端的格式确实很好,但由于它似乎选择了我表中的整个数据集,因此客户端执行的任何类型的操作都会执行得太差 - 只需转到下一页大约需要花费 10 分钟。 15 秒。为什么 gridview 不使用 LIMIT 和 pagerow 来仅选择客户端可见的必要数据?似乎只在选择整个表格内容后才使用 Linq Skip 和 Take 命令。

这是我尝试过的另一种方式,但行为相似:

// the ActionResult function inside my controller:
public ActionResult GridViewPartial() {
  DBEntities dbEntities = new DBEntities();
  var myLinqQuery = from s in dbEntities.myTable select new { s.row_id, s.row_username };

  return PartialView("GridViewPartial", myLinqQuery);
}

// inside the Razor view:
@model IQueryable
@Html.DevExpress().GridView(...).BindToLINQ("", "", (s, e) => { e.KeyExpression = "row_id"; e.QueryableSource = Model; }).GetHtml()

或者,使用 Bind() 而不是 BindToLINQ() 做同样的事情:

// inside the Razor view:
@model IQueryable
@Html.DevExpress().GridView(...).Bind(Model).GetHtml()

【问题讨论】:

    标签: c# linq asp.net-mvc-3 gridview devexpress


    【解决方案1】:

    不要在 Controller 端检索数据。

    在PartialView端做这个操作:

    @Html.DevExpress().GridView(...).BindToLINQ("", "", (s, e) => { 
        e.KeyExpression = "row_id";
    
        DBEntities dbEntities = new DBEntities();
        var myLinqQuery = from s in dbEntities.myTable select new { s.row_id, s.row_username };
    
        e.QueryableSource = myLinqQuery; 
    }).GetHtml()
    

    GridViewPartial Action 应该只返回 PartialView 对象:

    public ActionResult GridViewPartial() {
        return PartialView("GridViewPartial");
    }
    

    【讨论】:

      猜你喜欢
      • 2014-06-29
      • 2012-07-11
      • 1970-01-01
      • 2014-12-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-12-20
      相关资源
      最近更新 更多