Blog

Filter posts by the Tags of Blog section!

Custom paging extension Friday, 16 December 2016

There are a bunch of open source library for paging In C# but sometimes you need to have your own paging engine to have more control over. I've used the following simple custom paging in a few projects. Look at the following class:

  

public class PagedResult<T> where T : class

    {

        public int CurrentPage { get; set; }

 

        public int PageCount { get; set; }

 

        public int PageSize { get; set; }

 

        public int RowCount { get; set; }

 

        public IList<T> Results { get; set; }

 

        public PagedResult()

        {

            Results = new List<T>();

        }

    }

 

All of we needs in simple paging is there. Now let's do soma calculation for our paging in an extension class which is the goal of this post as well:

 

 

 public static class Extension

    {

        public static PagedResult<T> GetPagedResult<T>(this IQueryable<T> query, int page, int pageSize) where T : class

        {

            var result = new PagedResult<T>

            {

                CurrentPage = page,

                PageSize = pageSize,

                RowCount = query.Count()

            };

 

            var pageCount = (double)result.RowCount / pageSize;

            result.PageCount = (int)Math.Ceiling(pageCount);

 

            var skip = (page - 1) * pageSize;

            result.Results = query.Skip(skip).Take(pageSize).ToList();

 

            return result;

        }

    }

 

That's all! In order to use the above extension method, look at the sample below:

 

 

 class Program

    {

        static void Main(string[] args)

        {

            var pagedResult = GenerateData().GetPagedResult<Post>(1, 20);

        }

 

        static IQueryable<Post> GenerateData()

        {

            var posts = new List<Post>();

 

            for (int i = 0; i < 100; i++)

            {

                posts.Add(new Post { Id = i, Title = string.Format("title of {0}", i.ToString()) });

            }

 

            return posts.AsQueryable();

        }

 

        class Post

        {

            public int Id { get; set; }

 

            public string Title { get; set; }

        }

    }

 

Tags: C#

comments powered by Disqus