DevExpress MVC GridView BindToLINQ()选择的数据太多

本文关键字:选择 数据 太多 MVC GridView BindToLINQ DevExpress | 更新日期: 2023-09-27 18:21:51

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

即。使用SQLServerProfiler,我们可以看到它选择了表中200k多行中的所有列,而不仅仅是预期的10行。

视图如下:

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

网格在客户端的格式确实很好,但由于它似乎选择了我表中的整个数据集,客户端执行的任何类型的操作都会执行得太差——只进入下一页大约需要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()

DevExpress MVC GridView BindToLINQ()选择的数据太多

不要在控制器端检索数据。

在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操作应仅返回PartialView对象:

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