我正在用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(
- 分部
- 乘法
- 添加
- 减法