99  
csharp
Advertisement
Search  
Always will be ready notify the world about expectations as easy as possible: job change page
Feb 26

You have been doing pagination wrong in .NET 6

Author:
Source:
Views:
685

Pagination is in front of us everyday yet we take it for granted kind of like we do with most things. It’s what chunks huge lists of data (blog posts, articles, products) into pages so we can navigate through data.

This is how you did pagination until this point.

Pagination

using System;

public class Article
{
    public int Id;
    public string Title;
    public string Content;
    public int AuthorId;
    
    public List<Article> GetArticles()
    {
        return new List<Article> {
            new Article {Id = 1, Title = "Best title one", Content = "Amazing content", AuthorId = 1},
            new Article {Id = 2, Title = "Another title", Content = "More amazing content", AuthorId = 1},
            new Article {Id = 3, Title = "Unicorns", Content = "Even more amazing content", AuthorId = 1},
            new Article {Id = 4, Title = "Best title one", Content = "Amazing content", AuthorId = 1},
            new Article {Id = 5, Title = "Another title", Content = "More amazing content", AuthorId = 1},
            new Article {Id = 6, Title = "Unicorns", Content = "Even more amazing content", AuthorId = 1},
            new Article {Id = 7, Title = "Best title one", Content = "Amazing content", AuthorId = 1},
            new Article {Id = 8, Title = "Another title", Content = "More amazing content", AuthorId = 1},
            new Article {Id = 9, Title = "Unicorns", Content = "Even more amazing content", AuthorId = 1},
            new Article {Id = 10, Title = "Best title one", Content = "Amazing content", AuthorId = 1},
            new Article {Id = 11, Title = "Another title", Content = "More amazing content", AuthorId = 1},
            new Article {Id = 12, Title = "Unicorns", Content = "Even more amazing content", AuthorId = 1},
        };
    }
}

public class Program
{
    public static void Main()
    {
        List<Article> articles = new Article().GetArticles();
        int pageNumber = 1;
        int itemsPerPage = 5;

        IEnumerable<Article> page = articles.Skip((pageNumber - 1) * itemsPerPage).Take(itemsPerPage);

        Console.WriteLine($"Page: {pageNumber}");
        foreach(Article article in page)
        {
            Console.WriteLine($"    Id: {article.Id}, Title:{article.Title}, Content:{article.Content}, AuthorId:{article.AuthorId}");
        }
    }
}

And now this is how you can achieve the same result but in a more readable way using the Chunk method.

Chunk

using System;

public class Article
{
    public int Id;
    public string Title;
    public string Content;
    public int AuthorId;
    
    public List<Article> GetArticles()
    {
        return new List<Article> {
            new Article {Id = 1, Title = "Best title one", Content = "Amazing content", AuthorId = 1},
            new Article {Id = 2, Title = "Another title", Content = "More amazing content", AuthorId = 1},
            new Article {Id = 3, Title = "Unicorns", Content = "Even more amazing content", AuthorId = 1},
            new Article {Id = 4, Title = "Best title one", Content = "Amazing content", AuthorId = 1},
            new Article {Id = 5, Title = "Another title", Content = "More amazing content", AuthorId = 1},
            new Article {Id = 6, Title = "Unicorns", Content = "Even more amazing content", AuthorId = 1},
            new Article {Id = 7, Title = "Best title one", Content = "Amazing content", AuthorId = 1},
            new Article {Id = 8, Title = "Another title", Content = "More amazing content", AuthorId = 1},
            new Article {Id = 9, Title = "Unicorns", Content = "Even more amazing content", AuthorId = 1},
            new Article {Id = 10, Title = "Best title one", Content = "Amazing content", AuthorId = 1},
            new Article {Id = 11, Title = "Another title", Content = "More amazing content", AuthorId = 1},
            new Article {Id = 12, Title = "Unicorns", Content = "Even more amazing content", AuthorId = 1},
        };
    }
}

public class Program
{
    public static void Main()
    {
        List<Article> articles = new Article().GetArticles();
        int pageNumber = 1;
        int itemsPerPage = 5;

        IEnumerable<Article[]> allPages = articles.Chunk(itemsPerPage);

        Console.WriteLine($"Page: {pageNumber}");
       
        foreach(Article article in allPages.ElementAt(pageNumber - 1))
        {
            Console.WriteLine($"    Id: {article.Id}, Title:{article.Title}, Content:{article.Content}, AuthorId:{article.AuthorId}");
        }
    }
}

There’s nothing wrong with using the first method to do pagination. The Chunk method is a new way of doing achieving the same result but with a cleared code. It takes only one parameter, the maximum size of each chunk (largest numbers of items per page). Is important to note that the Chunk method is only available in .NET 6.

Conclusion

This is another way to do things, another tool in your arsenal so you can use both. 

Similar
Aug 11, 2021
Author: Mel Grubb
Code GenerationCode generation is a great way to apply patterns consistently across a solution or to create multiple similar classes based on some outside input file, or even other classes in the same solution. The tooling has changed over the...
Jul 9, 2023
Author: Kenji Elzerman
When you have multiple applications and they need to communicate with each other to exchange data you might want to use a protocol that makes something like that happen. In C#, the HTTPClient class provides a powerful and flexible way...
Mar 28
Author: Orestis Meikopoulos
In today’s story we are going to talk about what Tasks are and have a brief introduction on the Task Parallel Library (TPL). We will also give a small preview of the Async & Task-Based Asynchronous Patterns.TasksTo begin talking about...
one week ago
Author: Salman Karim
Long polling is a server-push technique used in web applications to efficiently update clients with new information. Unlike traditional polling, long polling keeps the request open until the server has new data to send. This method is beneficial when you...
Send message
Email
Your name
*Message


© 1999–2024 WebDynamics
1980–... Sergey Drozdov
Area of interests: .NET Framework | .NET Core | C# | ASP.NET | Windows Forms | WPF | HTML5 | CSS3 | jQuery | AJAX | Angular | React | MS SQL Server | Transact-SQL | ADO.NET | Entity Framework | IIS | OOP | OOA | OOD | WCF | WPF | MSMQ | MVC | MVP | MVVM | Design Patterns | Enterprise Architecture | Scrum | Kanban