Advertisement
Поиск  
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

Автор:
Источник:
Просмотров:
686

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. 

Похожее
Jul 11, 2021
Author: Sasha Mathews
In C#, reference types can be assigned null values. This is something that developers will have to live with until they use classes to create software. Unfortunately, the folks at Microsoft cannot simply disallow null assignment to reference variables at...
Jun 29, 2023
Author: Megha Prasad
Attributes and decorators, which allow you to attach metadata to classes, properties, and methods.AttributesAttributes in C# allow you to attach metadata to your classes, methods, and other code elements. This metadata can then be used at runtime to modify the...
Aug 24, 2022
Author: Jaydeep Patil
In this article, we will learn about global exception handling implementation using .NET Core 6 Web API step-by-step.Agenda Introduction Implementation of Global Exception HandlingPrerequisites Visual Studio 2022 .NET...
Jan 13, 2023
Author: Jaydeep Patil
We are going to discuss the Unit of Work design pattern with the help of a generic repository and step-by-step implementation using .NET Core 6 Web API.Agenda Repository Pattern Unit of Work ...
Написать сообщение
Почта
Имя
*Сообщение


© 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