93 lines
3.8 KiB
C#
93 lines
3.8 KiB
C#
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<Persona> personaRepo;
|
|
private readonly IAsyncRepository<Casa> casaRepo;
|
|
private readonly IAsyncRepository<Direccion> direccionRepo;
|
|
|
|
public WantItAllService(IAsyncRepository<Persona> personaRepo, IAsyncRepository<Casa> casaRepo, IAsyncRepository<Direccion> direccionRepo)
|
|
{
|
|
this.personaRepo = personaRepo;
|
|
this.casaRepo = casaRepo;
|
|
this.direccionRepo = direccionRepo;
|
|
}
|
|
|
|
public async Task<Persona> ConsultaLocaAwait(ConsultaLoca dto)
|
|
{
|
|
var includes = new List<Expression<Func<Persona, object>>>
|
|
{
|
|
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<Expression<Func<Casa, object>>>
|
|
{
|
|
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<IWantItAll> 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<IWantItAll> GetWithTasks()
|
|
{
|
|
var personas = personaRepo.GetAllAsync();
|
|
var casas = casaRepo.GetAllAsync();
|
|
var direcciones = direccionRepo.GetAllAsync();
|
|
|
|
await Task.WhenAll(personas, casas, direcciones);
|
|
|
|
|
|
IReadOnlyList<Persona> personas1 = await personas;
|
|
IReadOnlyList<Casa> casas1 = await casas;
|
|
IReadOnlyList<Direccion> direccions = await direcciones;
|
|
var toReturn = new IWantItAll
|
|
{
|
|
Personas = personas1.ToList(),
|
|
Casas = casas1.ToList(),
|
|
Direcciones = direccions.ToList(),
|
|
};
|
|
return toReturn;
|
|
}
|
|
}
|
|
}
|