Как я могу получить количество страниц PagedRdbQuery - PullRequest
0 голосов
/ 21 мая 2018

Я пытаюсь получить максимальное количество страниц для постраничного запроса, поэтому, если бы мне пришлось выкладывать данные в форме, скажем, есть 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» каждый раз, что наводит меня на мысль, что оно даст правильное число только в том случае, если я на самом деле прохожу и получаю все строки данных, что для меня нецелесообразно, поскольку у некоторых клиентов есть таблицы данных с более чеммиллион записей.Есть ли другой способ, которым я могу использовать Ideablade, чтобы просто получить количество строк из моей БД или получить максимальное количество страниц?

1 Ответ

0 голосов
/ 21 мая 2018

К сожалению, ни 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?;

Если использование DynamicEntity слишком громоздко, другой вариант - использовать ADO.NET напрямую, возможно, через InvokeServerMethod, если вам нужно сохранить БДдоступ на уровне сервера.

...