У меня около 14 000 строк данных. Если использовать следующий запрос EF, его загрузка занимает много времени, потому что я подозреваю, что он загружает все 14 000 строк, и только после этого выполняется дополнительная фильтрация. Это мой метод Select в моем репозитории.
Public Function SelectAll() As IEnumerable(Of be_Posts) Implements IPostRepository.SelectAll
Dim posts As IEnumerable(Of be_Posts)
Using db As Ctx = New Ctx
posts = db.be_Posts.OrderByDescending(Function(x) x.DateCreated).ToList
Return posts
End Using
И контроллер:
Function Index(page As Integer?) As ActionResult
Dim PageSize = System.Web.Configuration.WebConfigurationManager.AppSettings("PageSize")
Dim pageNumber As Integer = If(page, 1)
Dim posts = _repo.SelectAll()
Return View(posts.ToPagedList(pageNumber, PageSize))
End Function
Помощник в представлении:
@Html.PagedListPager((Model), Function(page) Url.Action("Index", New With { _
.page = page _
}), PagedListRenderOptions.ClassicPlusFirstAndLast)
Теперь, если добавить в предложение take
, например .Take(500)
, все будет работать значительно быстрее. Как я могу сделать этот запрос быстрее и при этом работать будут все записи? Я также использую расширение PagedList Троя Гуда, чтобы получить функциональность пейджинга. Все в порядке, пока я получаю всего несколько сотен записей. Так что делать? Большинство, если не все примеры пейджинга, которые я могу найти, использующие библиотеку Троя, включают весь код непосредственно в контроллер.