Kombinieren und projizieren verschiedene Entitätstypen in ein einzelnes Objekt
Posted: 05 Mar 2025, 12:28
ein. Dieses Mal muss ich jedoch mehrere verschiedene Gruppen von Entitäten abrufen, die in 1: 1 oder 1: N -Beziehungen innerhalb jeder Gruppe liegen. Das Projekt selbst ist in Controller/Service/Repository-Ebenen unterteilt. wird von einem Dienst aufgerufen, der für die Filterung, Sortierung und Paginierung der Daten verantwortlich ist. Daher versuche ich, bei iQueryable zu bleiben. Um es optimiert zu halten, ist das Ziel, alles in der Datenbank zu tun und dann die Abfrage über .tolistasync () zu führen. Entitäten in eine iQueryable, ohne die Abfrage zu materialisieren?
Code: Select all
.ThenInclude(...)
Code: Select all
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
{
//Mapping of common properties
};
private CombinedCalculationDto ToCombinedCalculationDto(UpdatingCalculation u) => new CombinedCalculationDto
{
//Mapping of common properties
};
private CombinedCalculationDto ToCombinedCalculationDto(EqualCalculation e) => new CombinedCalculationDto
{
//Mapping of common properties
};
}
< /code>
Wenn ich sie jedoch ausführe und versuche, Daten abzurufen, erhalte ich System. Erwägen Sie, den festgelegten Vorgang vor dem letzten 'Select' -Anruf zu verschieben.GetCombinedCalculations()