Пейджинг с помощью команды смещения SQL Server и внешнего интерфейса - PullRequest
0 голосов
/ 22 сентября 2019

У меня разбирается пейджинг в серверной части. Я использую следующий код:

public ActionResult GetStockTakeAllWithPagging(int id,int StartNumber , int EndNumber)
{
    List<StockTakeAllItems> result = database.GetStockTakeAllWithPagging(id,StartNumber,EndNumber);
    return Json(result, JsonRequestBehavior.AllowGet);
}

Я использую этот запрос SQL, и он работает так, как должен, и возвращает правильное количество строк.

select * 
from #StockTakeItems sti
order  by StocktakeID
offset @StartingRowNumber rows  
fetch next @EndingRowNumber -1 rows only

Мой вопрос находится на переднем крае. У меня есть количество элементов, которое нечетно 5000. Я собирался сделать цикл for следующим образом. Но я только хочу, чтобы цикл for обращался к веб-службе каждую тысячузаписи, так сказать, если бы было 7041 записей, хотя было бы легко определить 7000, как бы я работал, чтобы захватить последние 41?

public async void DownloadStockCount (long warehouseId)
{
   int count= await restServices.GetStockTakeAllCountForWarehouse(warehouseId);
   var realm = Realm.GetInstance();

   List<StockTakeAllItems> results = new List<StockTakeAllItems>();

   for (int i=0;  i < count; i++)
   {
        results= await  restServices.GetStockTakeAllWithPagging(warehouseId, 1,  i);
  }

  await DisplayAlert("Test", $"Count of items for stock count {count.ToString()}", "OK");
}

Это здесь, я хочу отправить 1 - 1000, 1000, 2000и так до тех пор, пока не будут получены все записи.Имейте в виду, я использую веб-API, который фильтрует результаты правильно, мне просто не нужно, как пропустить до конца набора записей.

1 Ответ

0 голосов
/ 22 сентября 2019

Чтобы сделать это, ваш GetStockTakeAllWithPagging метод должен возвращать больше, чем просто список StockTakeAllItems .Вы также должны будете включить информацию о нумерации страниц, например, общее количество элементов в источнике данных.Зная размер вашей страницы (например, 1000) и totalCount , вы можете рассчитать количество страниц по следующей формуле:

    const double PAGE_SIZE = 1000D;
    int pageCount = Convert.ToInt32(Math.Ceiling(totalCount/PAGE_SIZE));

Теперь, если вам нужны последние n (например, 41) элементов, вы начинаете с последней страницы, которая является pageCount .Ваш код должен быть изменен на это:

public async Task DownloadStockCount (long warehouseId)
{
    double count = await restServices.GetStockTakeAllCountForWarehouse(warehouseId);
    int pageCount = Math.Ceiling(count / 1000);
    var realm = Realm.GetInstance();

    List<StockTakeAllItems> results = new List<StockTakeAllItems>();
    // just to make the intend of the code more concise
    int startNumber = pageCount;
    int endNumber = pageCount;
    results = await restServices.GetStockTakeAllWithPagging(warehouseId, startNumber, endNumber);

    await DisplayAlert("Test", $"Count of items for stock count {count.ToString()}", "OK");
}
`` 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...