Проблема с производительностью Entity Framework - PullRequest
0 голосов
/ 05 марта 2019

Я делаю следующий запрос.Это просто слишком медленно из-за количества информации, которую извлекают.Сначала я извлекаю некоторые данные, фильтрую их и сохраняю для второго запроса в переменной filts, и на основе этого извлекаю другой набор данных из базы данных (готовность к загрузке).Есть ли способ выполнить эту фильтрацию, не извлекая сначала все эти данные, а затем фильтруя их, например, возможно, каким-то образом сделать это непосредственно в базе данных?Каков нормальный способ сделать это?Этот запрос иногда занимает более 15 секунд.Спецификации содержат около 100 тыс. Записей и около 30 тыс. Единиц.Мне нужно, чтобы запрос работал менее чем за полсекунды.IncludeAction указывает, какие элементы внешнего ключа следует извлекать вместе с самим элементом.

  var filts = new HashSet<int>(_uow.SpecialitiesRepository.GetAllAsQueryableAsNoTracking(IncludeAction<Speciality>.None)
                                       .Where(x => byPrice ? x.Price >= pl && x.Price <= pr : true)
                                       .Select(x => x.Id))
                                       .AsParallel(); 

  var query = _uow.SpecialitiesRepository.GetAllAsQueryableAsNoTracking(new IncludeAction<Speciality>(x => x.Include(t => t.Institution)))
                                         .Where(sp => filts.Contains(sp.Id))
                                         .AsParallel()
                                         .ToList() <--- this is needed in order to be able to use Institution in further filterings
                                         .Where(sp => byRegion ? sp.Institution.Region.ToString("G").ToLowerInvariant() != region.ToLowerInvariant() : true)
                                               && Institution.Countries[sp.Institution.CountryCode.ToLower()].Alpha2.ToLowerInvariant() ==
                                               lowerCountry : true)
                                         .AsParallel();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...