DevExpress MVC GridView BindToLINQ () выделяет слишком много данных - PullRequest
3 голосов
/ 27 января 2012

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

1 Ответ

4 голосов
/ 27 января 2012

Не получать данные со стороны контроллера.

Выполните эту операцию на стороне 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");
}
...