Mvc Telerik Grid С большой базой данных

Я использую Telerik MVC Grid в моем проекте MVC, моя таблица имеет около 1 миллиона записей. Моя сетка слишком долго загружается.

Это мой запрос //

  var bib = (from a in db.Bibs
                   join inf in db.InfoTypes
                   on a.InfoTypeId equals inf.Id
                   where a.Status == "A"

                   select new BibViewModel
                   {
                       Id = a.Id,
                       Type = inf.Type,
                       InfoType = inf.Description,
                       Title = (from asd in db.BibContents where asd.BibId == a.Id && asd.TagNo == "245" && asd.Sfld == "a" select asd.Value).FirstOrDefault(),
                       Author = (from asd in db.BibContents where asd.BibId == a.Id && asd.TagNo == "100" && asd.Sfld == "a" select asd.Value).FirstOrDefault(),
                       CatalogueDate = a.CatalogDate,
                       Contents = "",
                       CreatedOn = a.CreatedOn,
                       ItemRelation = db.Items.Any(item => item.BibId == a.Id),
                       IssueRelation = db.Issues.Any(item => item.BibId == a.Id),

                   });


        return View(new GridModel(bib.OrderByDescending(x => x.CreatedOn).Tolist()));

1 ответ

ToList() на самом деле вызывает запрос, поэтому если вызов ToList() занимает слишком много времени, это означает, что проблема связана с запросом.

В LINQ вы можете использовать пейджинг, как в следующем посте; идея состоит в том, чтобы использовать Skip и Take, чтобы пропустить X записей, и только брать Y записей, как в:

var results = (from .. select ..).Skip(X).Take(Y)

С записями 1M я бы настоятельно рекомендовал заменить ее хранимой процедурой, которая будет намного, намного быстрее для того, что вы пытаетесь сделать. Рассмотрим индивидуальный подход к разбиению на страницы, который очень хорошо работает для меня с большими наборами результатов:

Если вы не можете использовать хранимые процедуры, прочтение этого поможет понять, что нужно сделать с нумерацией страниц. С LINQ вы захотите изучить генерируемый SQL, чтобы увидеть, где вы также можете точно настроить запрос, используя SQL profiler или LINQPad.

Другие вопросы по тегам