首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何通过sqlkata PaginationResult页面?

如何通过sqlkata PaginationResult页面?
EN

Stack Overflow用户
提问于 2022-01-12 23:09:25
回答 1查看 286关注 0票数 2

我使用.NET核心和SQLKata访问Server数据库。我有一个使用SQLKata.Execution.PaginationResult从数据库中获取所有记录的方法。

这是在储藏室:

代码语言:javascript
复制
public class MyTableRepository : IMyTableRepository
{
   private QueryFactory _db;
   public MyTableRepository(IConfiguration configuration)
   {
     var conn = new 
     SqlConnection(configuration.GetConnectionString("MyTable"));
     _db = new QueryFactory(conn, new SqlKata.Compilers.SqlServerCompiler());
   }

  public PaginationResult<MyModel> GetAll(int page = 0, int perPage = 25)
  {
    dbResult = _db.Query("MyTable").Paginate<MyModel>(page, perPage);
    return dbResult; 
  }

上面的内容来自我的主计长,如下所示:

代码语言:javascript
复制
    private readonly IMyTableRepository _MyTableRepository;
    public MyTableController(IMyTableRepository MyTableRepository)
    {
        _MyTableRepository = MyTableRepository;
    }
    [HttpGet]
    [Route("GetMyTable")]
    public List<MyModel> GetMyTable()
    {
        PaginationResult<MyModel> dbResult = MyTableRepository.GetAll(1, 
        25);
        List<MyModel> AccumResult = dbResult.List.ToList();
        while(dbResult.HasNext)    
        {       
            dbResult = dbResult.Next();
            AccumResult.AddRange(dbResult.List.ToList());
        }
        return AccumResult;  
    }

如何从dbResult获得下一组结果?

我在下面尝试,在执行GetMyTable之后,我执行GetNextMyTable,但是在PaginationResult GetNext()中,dbResult总是空的。

在主计长:

代码语言:javascript
复制
    [HttpGet]
    [Route("GetNextMyTable")]
    public List<MyTable> GetNextMyTable()
    {
        var result = _MyTableRepository.GetNext().List;
        return result.ToList();
    }

在保管所:

代码语言:javascript
复制
public PaginationResult<MyTable> GetNext()
{
  while(dbResult.HasNext)    //--->> dbResult is null
  {       
   dbResult = dbResult.Next();
   return dbResult; 
  }      
  return null;
}    

如果我在控制器内执行下一个方法,我也会得到一个错误

代码语言:javascript
复制
private readonly IMyTableRepository _MyTableRepository;
private PaginationResult<SP_SMA_Reporting_Accts> dbResult;

[HttpGet]
[Route("GetMyTable")]
public List<MyModel> GetMyTable()
{
    var dbResult = _MyTableRepository.GetAll(1, 25).List;
    return dbResult.ToList();
}

[HttpGet]
[Route("GetNextMyTable")]
public List<MyTable> GetNextMyTable()
{
    var result = dbResult.Next().List;//->Error since dbResult is null
    return result.ToList();
}
EN

回答 1

Stack Overflow用户

发布于 2022-01-13 16:55:57

简而言之,重构存储库方法GetAll以调用db.Query

用途:

代码语言:javascript
复制
_db.Query("MyTable").Paginate<MyModel>(page, perPage);

而不是

代码语言:javascript
复制
_db.Paginate<MyModel>(new Query("MyTable"), page, perPage);

解释:

在调用Next()方法时,PaginationResult将分页过程委托给保持查询,在您的情况下,由于您传递的是new Query(),因此没有连接信息,因此您将获得null。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70689554

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档