From 29fdc61bbaa7b664abdbda8fdac31dc3bd6781d1 Mon Sep 17 00:00:00 2001 From: wendelti Date: Wed, 18 Jul 2018 16:15:43 -0300 Subject: [PATCH] Performance improvement This code may run up to 11% faster because the same query plan is used every time the query is run, which saves CPU time and avoids polluting the query cache. --- EntityFrameworkPaginate/PaginateService.cs | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/EntityFrameworkPaginate/PaginateService.cs b/EntityFrameworkPaginate/PaginateService.cs index 95086e8..90ee863 100644 --- a/EntityFrameworkPaginate/PaginateService.cs +++ b/EntityFrameworkPaginate/PaginateService.cs @@ -1,5 +1,6 @@ using System; using System.Linq; +using System.Data.Entity; namespace EntityFrameworkPaginate { @@ -16,12 +17,14 @@ public static class PaginateService /// A Page object with filtered data for the given page number and page size. public static Page Paginate(this IQueryable query, int pageNumber, int pageSize) { + var pageSkip = (pageNumber - 1) * pageSize; + var result = new Page { CurrentPage = pageNumber, PageSize = pageSize, RecordCount = query.Count(), - Results = query.Skip((pageNumber - 1) * pageSize).Take(pageSize).ToList() + Results = query.Skip(() => pageSkip).Take(() => pageSize).ToList() }; result.PageCount = (int)Math.Ceiling((double)result.RecordCount / pageSize); return result;