c# - .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);
}
解决方案
推荐阅读
- android - Firebase Android ...使用查询
- excel - 查找具有多个条件的步骤数
- java - 我在java中实现链表,但我的代码既没有给出任何错误也没有产生任何输出
- c# - 带有命令的水晶报表不会出现所有字段
- android - java.lang.IllegalStateException:已附加在 androidx.fragment.app.FragmentManagerImpl.attachController -
- php - 从 PHP 表单更新 NULL 日期时间列
- javascript - 如何在滚动时从使用 javascript 加载元素的网页中抓取?
- c++ - C++ 中的输入限制和错误检查
- python - 如何通过python将记录插入SQLite3数据库?
- amazon-s3 - 如何在无服务器中上传多部分表单数据