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()
不要在控制器端检索数据。
在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");
}