首页 > 解决方案 > .NET Core 5 Entity Framework 如何返回反向分页

问题描述

我的问题是如何修改这个

 var count = await source.CountAsync();
 var items = await source.Skip((pageNumber - 1) * pageSize).Take(pageSize).ToListAsync();

代替从头到尾返回经典增量。以此结束开始,返回最后一页,然后向上(反向分页)。

全班

using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.EntityFrameworkCore;

namespace API.Helpers
{
    public class PagedList<T> : List<T>
    {
        public PagedList(IEnumerable<T> items, int count, int pageNumber, int pageSize)
        {
            CurrentPage = pageNumber;
            TotalPages = (int) Math.Ceiling(count / (double) pageSize);
            PageSize = pageSize;
            TotalCount = count;
            AddRange(items);
        }

        public int CurrentPage { get; set; }
        public int TotalPages { get; set; }
        public int PageSize { get; set; }
        public int TotalCount { get; set; }

        public static async Task<PagedList<T>> CreateAsync(IQueryable<T> source, int pageNumber, int pageSize)
        {
            var count = await source.CountAsync();
            var items = await source.Skip((pageNumber - 1) * pageSize).Take(pageSize).ToListAsync();
            return new PagedList<T>(items, count, pageNumber, pageSize);
        }
    }
}

编辑

public async Task<PagedList<MessageDto>> GetMessageThread (string currentUsername, string recipientUsername) 
{
    var messages = _context.Messages
                           .Where (m => m.Recipient.UserName == currentUsername 
                                        && m.RecipientDeleted == false 
                                        && m.Sender.UserName == recipientUsername || m.Recipient.UserName == recipientUsername 
                                        && m.Sender.UserName == currentUsername 
                                        && m.SenderDeleted == false)
                           .OrderBy (m => m.MessageSent)
                           .ProjectTo<MessageDto>(_mapper.ConfigurationProvider)
                           .AsQueryable ();
           
    return await PagedList<MessageDto>.CreateAsync (messages, new PaginationParams().PageNumber, new PaginationParams().PageSize);
}

标签: c#.netentity-frameworkasp.net-core

解决方案


推荐阅读