Код: Выделить всё
.ThenInclude(...)Код: Выделить всё
public class CombinedCalculationRepository
{
private readonly DbSet
_plannedCalculations;
private readonly DbSet _updatingCalculations;
private readonly DbSet _eqaulCalculations;
public CombinedCalculationRepository(MyDbContext context) { /* assigning DbSets */ }
public IQueryable GetCombinedCalculations()
{
IQueryable query = GetPlannedCalculations()
.Union(GetUpdatingCalculations())
.Union(GetEqualCalculations());
return query;
}
private IQueryable GetPlannedCalculations()
{
return _plannedCalculations
.Include(p => p.Owners)
.Include(p => p.Submitter)
.Select(p => ToCombinedCalculationDto(p));
}
private IQueryable GetUpdatingCalculations()
{
return _updatingCalculations
.Include(p => p.Owners)
.Include(p => p.Submitter)
.Select(p => ToCombinedCalculationDto(p));
}
private IQueryable GetEqualCalculations()
{
return _eqaulCalculations
.Include(p => p.Owners)
.Include(p => p.Submitter)
.Select(p => ToCombinedCalculationDto(p));
}
private CombinedCalculationDto ToCombinedCalculationDto(PlannedCalculation p) => new CombinedCalculationDto
{
Id = p.Id,
SubmitterName = p.Submitter.Name,
SubmitterId = p.Submitter.Id,
Owners = p.Owners.Select(o => new OwnerDto
{
Name = o.Name,
Id = o.Id
}).ToList(), //I know that .ToList() materializes the query, but I don't know how to avoid it
// and so on for other properties
};
private CombinedCalculationDto ToCombinedCalculationDto(UpdatingCalculation u) => new CombinedCalculationDto
{
//Mapping of common properties (same as in PlannedCalculation)
};
private CombinedCalculationDto ToCombinedCalculationDto(EqualCalculation e) => new CombinedCalculationDto
{
//Mapping of common properties (same as in PlannedCalculation)
};
}
< /code>
Репозиторий затем вводится в службу и используется там: < /p>
public class CalculationService
{
private readonly IPlannedCalculationRepository _plannedCalculationRepository;
private readonly IUpdatingCalculationRepository _updatingCalculationRepository;
private readonly IEqualCalculationRepository _equalCalculationRepository;
private readonly ICombinedCalculationRepository _combinedCalculationRepository;
public List GetCalculations(CalculationType calculationType)
{
switch (calculationType)
{
case CalculationType.Planned:
return _plannedCalculationRepository.GetCalculations();
case CalculationType.Updating:
return _updatingCalculationRepository.GetCalculations();
case CalculationType.Equal:
return _equalCalculationRepository.GetCalculations();
default:
//this path is the problem
return _combinedCalculationRepository.GetCombinedCalculations();
}
}
}
< /code>
Однако, когда я запускаю его и пытаюсь получить данные, я получаю < /p>
system.invalidoperationexception: невозможно перевести операцию установки после применения прогноза клиента. Рассмотрим перемещение операции установки перед последним «SELECT» Call. < /P>
< /blockquote>
Поскольку сущности довольно сложны, мне нужно указать свойства, которые мне интересны. Кроме того, эти свойства являются единственными общими свойствами между 3 группами объектов. < /P>
.GetCombinedCalculations()Я пытался использовать анонимный тип вместо комбинированного калькуляции , а затем он работает, но я не могу представить, как фильтровать/сортировать сортировки ANONINGUS. объекты в Iqueryable, не материализуя запрос?>
Подробнее здесь: https://stackoverflow.com/questions/794 ... gle-object