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

时间:2012-01-27 13:39:49

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

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

IE。使用SQL Server Profiler,我们看到它选择表中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()

1 个答案:

答案 0 :(得分:4)

不要在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");
}