При использовании функциональности 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()