首页 > 解决方案 > 尝试在.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());
    }

但是当我运行程序时,我得到了这个错误:

在此处输入图像描述

标签: c#asp.net-corepaginationentity-framework-core

解决方案


我想问题是你试图跳过负 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;
   }
}

我希望这能解决你的问题


推荐阅读