Сделайте этот сложный запрос EF одним вызовом - PullRequest
0 голосов
/ 28 февраля 2020

Здесь три звонка. Один для получения Coverages, которые доступны (CoverageAvailability) для спецификаций c Vendor. Эти Coverage s являются частью различных CoverageGroup s. Я хочу, чтобы эти Coverage были сгруппированы по их CoverageGroup. Поэтому я должен знать, что это был CoverageAvailbility для этого Vendor, и его CoverageGroup. Тогда я хочу CoverageDeductibles для каждого Coverage, и вот тут все становится грязно. Это делает вызов 2, и он зацикливается на каждом Coverage. Я попробовал несколько способов сделать это, но обращения к базе данных становятся дорогими, вероятно, из-за размера возвращаемой таблицы. Третий вызов - это вопрос другого вопроса.

gwce.Configuration.LazyLoadingEnabled = false;
var coverages = from ca in gwce.CoverageAvailability
    select ca.Coverage;

var coverageDeductibles = await (from cda in gwce.CoverageDeductibleAvailability
    join cd in gwce.CoverageDeductible on cda.CoverageDeductibleId equals cd.CoverageDeductibleId
    join cdp in gwce.CoverageDeductiblePricing on cd.CoverageDeductibleId equals cdp.CoverageDeductibleId
    join cab in gwce.CoverageAgeBand on cdp.CoverageAgeBandId equals cab.CoverageAgeBandId
    select cd).GroupBy(x => x.CoverageId).ToDictionaryAsync(x => x.Key);

foreach (var coverage in coverages)
{
    coverageDeductibles.TryGetValue(coverage.CoverageId, out var currentCoverageDeductibles);
    if (currentCoverageDeductibles == null) continue;
    coverage.CoverageDeductible = currentCoverageDeductibles.ToArray();
}
var groups = coverages.GroupBy(c => c.CoverageGroup);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...