RU EN

You have been doing pagination wrong in .NET 6

Автор:
Источник:
Просмотров:
4760
You have been doing pagination wrong in .NET 6 favorites 0

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. 

Похожее
Aug 11, 2021
Author: Mel Grubb
Code Generation Code 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...
Jul 23, 2023
Unlocking Resilience and Transient-fault-handling in your C# Code In an ideal world, every operation we execute, every API we call, and every database we query, would always work flawlessly. Unfortunately, we live in a world where network outages, server overloads,...
15 марта 2024 г.
Автор: Рустем Галиев
Blazor — это технология, позволяющая создавать клиентские веб-приложения с использованием C# и .NET, а не JavaScript. Blazor может запускать ваш код одним из двух способов. Blazor WebAssembly выполняет код C# на стороне клиента в любом современном браузере, поддерживающем WebAssembly. Blazor...
Jun 2, 2023
Cyclomatic complexity is a code metric (integer value 1 or more) used to measure how complex a function/method is. It does not take into account lines of code but instead considers complexity to be the distinct paths through a function....
Написать сообщение
Тип
Почта
Имя
*Сообщение