Просто для информации:
Я не могу использовать разбиение на страницы (пропустить, взять), так как записи поступают из нескольких таблиц. Для получения подробной информации вы можете проверить модель Report.
Я должен попытаться получить данные one by one в пользовательском интерфейсе из WebAPI.
Приведенный ниже код извлекает все записи за раз, но записи огромны, и это занимает больше минуты, что не очень хорошо с точки зрения UX.
Модель
public class Report
{
public string Region { get; set; }
public List<Country> CountryList { get; set; }
public List<State> StateList { get; set; }
public List<District> DistrictList { get; set; }
}
Веб-API
[HttpGet]
public HttpResponseMessage GetReports()
{
var tempReports = this.mService.GetReports();
if (tempReports == null)
{
return ErrorResult(HttpStatusCode.NotFound);
}
return OK(tempReports);
}
Услуга
public IEnumerable<Report> GetReports()
{
List<int> totalValidRecords = ; //This comes from a table on the basic of which the report will be generated.
foreach(int id in totalValidRecords)
{
List<Region> regions= //gets list of record from Region table.
foreach(Region region in regions)
{
List<Country> countries= //gets list of countries from country table based on region.
foreach(Country country in counties)
{
List<State> states = //gets list of states from State table based on country.
foreach(State state in states)
{
List<District> districts = //gets list of districts from District table based on state.
//Other logic which computes and access other rest of dependent tables data.
}
}
}
yield return report;
}
}





То, что вы хотите, называется WebSockets, а для .net у вас есть библиотека SignalR, которая позволяет вам создавать подключения к тем веб-сокетам, где вы будете отправлять данные на этот канал, когда интерфейс делает этот запрос, вы подключаетесь к нужному каналу и все данные отправляются там вы можете начать с показа в своем интерфейсе, это решение требует некоторых усилий для настройки, но я настоятельно рекомендую его вам. https://github.com/SignalR/SignalR
Пример: API запроса FrontEnd, API получает первый заполненный список «регионов», отправляет на канал все регионы, интерфейс получает эти значения и заполняет некоторую переменную и отображает ее пользователю, и так далее...
У вас должна быть реализована логика для извлечения выгружаемых данных из самой базы данных. Он должен ожидать параметры pageNumber и PageSize и получать данные из базы данных только для этой страницы. Вложенный цикл foreach в вашем коде не очень хорош. Вам нужно найти лучший способ получить все данные в одном запросе. Вам нужно поделиться дополнительным кодом о том, как именно вы извлекаете данные для отчетов.