【发布时间】:2022-01-14 06:40:28
【问题描述】:
我正在使用 .NET Core 和 SQLKata 来访问 SQL Server 数据库。 我有一种方法可以使用 SQLKata.Execution.PaginationResult 从数据库中获取所有记录。
这是在存储库中:
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;
}
上面是从我的控制器中调用的,如下所示:
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总是为null。
在控制器中:
[HttpGet]
[Route("GetNextMyTable")]
public List<MyTable> GetNextMyTable()
{
var result = _MyTableRepository.GetNext().List;
return result.ToList();
}
在存储库中:
public PaginationResult<MyTable> GetNext()
{
while(dbResult.HasNext) //--->> dbResult is null
{
dbResult = dbResult.Next();
return dbResult;
}
return null;
}
如果我在 Controller 中执行 Next 方法,我也会收到错误
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();
}
【问题讨论】:
-
为什么不直接在
GetAll()内部返回db.Query(...).Paginate(page, perPage),然后使用result.Next()方法 -
您的意思是在 GetAll() 中也执行 result.Next() 吗? dbResult = _db.Paginate
(new Query("MyTable"), page, perPage); dbResult.Next();返回 dbResult; -
不,只需返回
PaginationResult并在控制器中使用Next()方法 -
在我的控制器中,在 GetNextSP_SMA_Reporting_Accts() 中,当我执行 var result = Result.Next().List;结果也是空的,所以我也得到一个错误。我用这段代码更新了我的原始帖子
标签: c# .net-core pagination sqlkata