【发布时间】: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