C# 如何获取PagedRdbQuery的页数

C# 如何获取PagedRdbQuery的页数,c#,winforms,devforce,C#,Winforms,Devforce,我试图获得分页查询的最大页数,所以如果我在表单上分页数据,假设有300个数据项,每个页面显示100个,那么有3个页面,但在这种情况下,我不知道有多少个数据项,因为它总是被添加到。有没有一种简单的方法可以使用我正在使用的PagedRdbQuery来获取数据,从而获得最大页面数 到目前为止我已经试过了 private int GetMaxPagesOfRdbQuery(PagedRdbQuery query) { int pages = 0; query.C

我试图获得分页查询的最大页数,所以如果我在表单上分页数据,假设有300个数据项,每个页面显示100个,那么有3个页面,但在这种情况下,我不知道有多少个数据项,因为它总是被添加到。有没有一种简单的方法可以使用我正在使用的PagedRdbQuery来获取数据,从而获得最大页面数

到目前为止我已经试过了

 private int GetMaxPagesOfRdbQuery(PagedRdbQuery query)
    {
        int pages = 0;
        query.CurrentPage = 1;
        while (!query.IsLastPage)
        {
            query.NextPage();
            pages += 1;
        } 
        return pages;
    }

但是,每次返回的数字都是“9999”,这让我相信,只有在我实际浏览并获取所有数据行时,它才会给出正确的数字,这对我来说是不切实际的,因为有些客户的数据表包含超过一百万条记录。是否有其他方法可以使用iDeaBrade从数据库获取行数或获取最大页面数

不幸的是,PagedRdbQuery和DevForce Classic都没有提供直接的方法来实现这一点

作为一种解决方法,您可以在单独的查询中获取项目计数,但这也不是完全直接的,因为Classic也没有提供直接获取聚合的方法。获取计数的最简单方法可能是使用DynamicEntity。例如,这将检索Employee表中的行数:

  var aType = DynamicEntityTypeBuilder.CreateType("Dummy", "yourdatasourcekeyname");
  var query = new PassthruRdbQuery(aType, "select count(*) ct from Employee");
  var entities = pManager.GetEntities<DynamicEntity>(query);
  var ct = entities?[0]?[0] as int?;
var-aType=DynamicEntityTypeBuilder.CreateType(“Dummy”、“yourdatasourcekeyname”);
var查询=新的PassthruRdbQuery(aType,“select count(*)ct from Employee”);
var entities=pManager.GetEntities(查询);
var ct=实体?[0]?[0]为整数?;

如果使用DynamicEntity太麻烦,另一种选择是直接使用ADO.NET,如果需要在服务器层保持DB访问,可以通过InvokeServerMethod使用。

我已经尝试了上面的代码,更改以适应我的用例,但我收到一个返回的错误,说找不到实体类型的数据源键
RdbKey-aKey=(RdbKey)Form1.mPersMgr.GetDataSourceKey(typeof(Model.Inventory));var type=DynamicEntityTypeBuilder.CreateType(“InvCount”,aKey.Name);var selectCtQuery=new PassthruRdbQuery(输入“选择计数(*)作为存货的CT”);var entities=Form1.mPersMgr.GetEntities(selectCtQuery);var计数=实体?[0]?[0]为整数可能我在这里做错了什么?检查aKey.Name值是否在ibconfig/config的rdbKeys部分中定义。数据源扩展也可能存在问题,或者如果您有自定义DataSourceKeyResolver,您是否正在使用其中一种?