使用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()
答案 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");
}