c# - 尝试在.net core web api中实现分页时出现SqlException错误
问题描述
我有这两段代码来实现分页。
第一个是一个类,如下所示:
public class QueryParameters
{
const int _maxSize = 100;
private int _size = 50;
public int Page { get; set; }
public int Size
{
get { return _size; }
set { _size = Math.Min(_maxSize, value); }
}
}
第二个是我的 HttpGet 代码:
private readonly NSContext _context;
public UsersController(NSContext context)
{
_context = context;
}
[HttpGet]
public async Task<IActionResult> GetAllUSers([FromQuery] QueryParameters queryParameters)
{
IQueryable<User> users = _context.User;
users = users
.Skip(queryParameters.Size * (queryParameters.Page - 1))
.Take(queryParameters.Size);
return Ok(await users.ToArrayAsync());
}
但是当我运行程序时,我得到了这个错误:
解决方案
我想问题是你试图跳过负 50 (-50) 行,即 QueryParameters 类中的 PAGE 变量为 0,因为你没有在任何地方初始化它
所以这个声明
Skip(queryParameters.Size * (queryParameters.Page - 1))
说 Skip(50 * (0 - 1)) 这是 Skip (-50)
这就是错误的原因。
你可以给一个默认值
如果你使用 C# 6,你可以这样做:
public int Page { get; set; } = 1
或者
private int _Page = 1;
public int Page
{
get
{
return _Page;
}
set
{
_Page = value;
}
}
我希望这能解决你的问题
推荐阅读
- java - PageRequest:页面值重叠
- javascript - 使用 nextjs 中的 setAppLanguage 更改语言时查询为空
- javascript - 如何将商品添加到购物车
- string - 删除字符串中的回文子串以创建最短字符串
- php - $request->input 返回 null laravel 8
- javascript - 新版本中的 D3 事件
- javascript - 等待所有承诺完成,然后执行其余代码
- databricks - 在 Azure Databricks 中每隔一天安排一次作业
- r - 我可以转置单列吗?
- node.js - 如何将存储在 MS SQL Server 2012 中的图像作为图像数据类型加载到 nodejs 服务器中,然后在标记中的客户端网页中呈现