3
當使用devexpress gridview的bindtoLINQ功能時,它會查詢整個表集而不是客戶端正在查看的頁面。DevExpress MVC GridView BindToLINQ()選擇太多數據
IE。使用SQL Server Profiler,我們看到它選擇表中,而不只是預期的10
視圖中的200K +行的所有列如下:
@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()
另外,使用綁定(),而不是BindToLINQ()做同樣的事情:
// inside the Razor view:
@model IQueryable
@Html.DevExpress().GridView(...).Bind(Model).GetHtml()