EF Core 6寻呼错误:OFFSET不能为负数



我正在用EF核心6和dotnet核心进行分页。

public async Task<IEnumerable<CommentResponse>> GetCommentOfPostAsync(Guid PostId, int PageNumber, int PageSize)
=> await _context.Comments
.Include(comment => comment.User)
.OrderBy(comment => comment.CommentId)
.Select(
data => new CommentResponse
{
CommentId = data.CommentId,
UserId = data.UserId,
Avatar = data.User.Avatar,
CommentText = data.CommentText,
Username = data.User.Username,
Created = data.Created
}
)
.Skip(PageNumber - 1 * PageSize)
.Take(PageSize)
.ToListAsync();

但是当我通过PageSize>1,它总是返回一个错误。

Npgsql.PostgresException(0x80004005(:2201X:OFFSET不得为负

我为什么会出现这个错误,以及如何解决它。非常感谢。

跳过((页码-1(*PageSize(

您违反了运算符优先级规则-由于乘法的优先级高于减法,表达式.Skip(PageNumber - 1 * PageSize)被计算为.Skip(PageNumber - (1 * PageSize))(注意括号(。

因此,传递给Skip的值不是您想要的值,并且基于该错误消息,它是一个负值。

关于这一点,我学到了一条一般的经验法则,那就是记住缩写词";BODMAS";了解优先规则:

  • 括号
  • 订单(例如x^5(
  • 分部
  • 乘法
  • 添加
  • 减法

最新更新