Здесь три звонка. Один для получения 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);