using back.Entities.DTOs.Response; using back.Entities; using back.Application.Contracts.Services; using back.Application.Contracts.Persistence; using back.Entities.DTOs.Request; using System.Linq.Expressions; namespace back.Application.Services { public class WantItAllService : IWantItAllService { private readonly IAsyncRepository personaRepo; private readonly IAsyncRepository casaRepo; private readonly IAsyncRepository direccionRepo; public WantItAllService(IAsyncRepository personaRepo, IAsyncRepository casaRepo, IAsyncRepository direccionRepo) { this.personaRepo = personaRepo; this.casaRepo = casaRepo; this.direccionRepo = direccionRepo; } public async Task ConsultaLocaAwait(ConsultaLoca dto) { var includes = new List>> { persona => persona.Casas // Nota: Directamente aquí no puedes añadir la Direccion ya que es una propiedad de Casa, no de Persona. }; var personasConCasas = await personaRepo.GetAsync( predicate: p => p.Casas.Count > 1, // Aquí puedes definir un filtro si es necesario, por ejemplo: persona => persona.Nombre == "John Doe" orderBy: null, // Aquí puedes definir cómo quieres ordenar los resultados, por ejemplo: q => q.OrderBy(persona => persona.Nombre) includes: includes, disableTracking: true ); var includes2 = new List>> { casa => casa.Direccion // Nota: Directamente aquí no puedes añadir la Direccion ya que es una propiedad de Casa, no de Persona. }; var casas = await casaRepo.GetAsync( predicate: p => p.Direccion.Calle.ToLower().Contains("falsa"), // Aquí puedes definir un filtro si es necesario, por ejemplo: persona => persona.Nombre == "John Doe" orderBy: null, // Aquí puedes definir cómo quieres ordenar los resultados, por ejemplo: q => q.OrderBy(persona => persona.Nombre) includes: includes2, disableTracking: true ); var pl = personasConCasas.ToList(); var c = casas.ToList(); var result = pl.Where(x=>x.Casas.Any(y=>casas.Where(w=>w.Id == y.Id).Any())).ToList(); return result.FirstOrDefault(); } public async Task GetWithAsyncAwait() { var personas = await personaRepo.GetAllAsync(); var casas = await casaRepo.GetAllAsync(); var direcciones = await direccionRepo.GetAllAsync(); var toReturn = new IWantItAll { Personas = personas.ToList(), Casas = casas.ToList(), Direcciones = direcciones.ToList(), }; return toReturn; } public async Task GetWithTasks() { var personas = personaRepo.GetAllAsync(); var casas = casaRepo.GetAllAsync(); var direcciones = direccionRepo.GetAllAsync(); await Task.WhenAll(personas, casas, direcciones); IReadOnlyList personas1 = await personas; IReadOnlyList casas1 = await casas; IReadOnlyList direccions = await direcciones; var toReturn = new IWantItAll { Personas = personas1.ToList(), Casas = casas1.ToList(), Direcciones = direccions.ToList(), }; return toReturn; } } }