Какой способ получить высокую производительность при выборе большого количества данных IQueryable Vs для l oop (с использованием Entity Frame Work) - PullRequest
0 голосов
/ 06 августа 2020

Я пытаюсь получить список из базы данных, содержащий два или более списков внутри этого списка. (Используя. net core, entity framework). Предположим, у меня есть два заголовка вызова таблицы и таблица сведений.

Заголовочная таблица Заголовочная таблица

Подробная таблица Подробная таблица

И мне нужен такой результат:

{
   "data":[
      {
         "Country":"Singapore",
         "Hospital_List":[
            {
               "Hospital_Name":"SG Host A"
            },
            {
               "Hospital_Name":"SG Host A"
            }
         ]
      },
      {

      }
   ]
}

Я знаю только два способа получить такой результат: Первый способ, выберите данные списка стран с пустым списком больниц как Список , затем для l oop этот список, чтобы снова выбрать связанный список больниц из базы данных. И второй способ, выберите данные списка стран с пустым списком больниц как IQueryable List , а затем выберите связанный список больниц с помощью соединения с больничной таблицей. Итак, мой вопрос:

Какой путь должен я раньше получал более высокую производительность? И есть ли другой способ?

Пожалуйста, помните, что в моей реальной таблице много полей и данных.

1 Ответ

0 голосов
/ 06 августа 2020

Для l oop дает самую низкую производительность, потому что вы будете создавать запрос SQL для каждой итерации. Вместо этого попробуйте следующее решение:

from hospital in hospitals
group hospital by hospital.CID into gh
join country in countries
  on gh.FirstOrDefault().CID equals country.CID
select new
{
  Country = country.Country,
  Hospital_List = from h in gh select h
}

EDITED:

И если ваша модель создана правильно, вы можете использовать этот код:

from hospital in hospitals
        join country in countries
           on hospital.Country equals country
        group hospital by hospital.CID into gh
        select new
        {
            Country = from h in gh select h.Country.Country,
            Hospital_List = from h in gh select h
        }
...