public ICollection <VueloTo> ObtenerVuelosPorFiltro(FiltroVuelosTo filtro) { List <VueloTo> vuelos = new List <VueloTo>(); using (var Contexto = ViveVolarDbContext.GetDbContext()) { var vueloRepositorio = new VueloRepository(Contexto); var result = vueloRepositorio.Filtrar(ConstruirExpresionConsultaVuelosPorFiltroVuelos(filtro)).ToList(); vuelos = Mapper.Map <List <VueloTo> >(result); } return(vuelos); }
public void ObtenerVuelosPorFiltro() { FiltroVuelosTo filtro = new FiltroVuelosTo(); filtro.CriterioBusquedaOrigen = FiltroVueloOrigen.IdOrigen; filtro.CriterioBusquedaDestino = FiltroVueloDestino.IdDestino; filtro.IdOrigen = 2; filtro.IdDestino = 1; filtro.FechaOrigen = new DateTime(2018, 6, 21); filtro.FechaDestino = new DateTime(2018, 6, 21); var result = _vuelosRepo.ObtenerVuelosPorFiltro(filtro); Assert.IsNotNull(result); }
private Expression <Func <Vuelo, bool> > ConstruirExpresionConsultaVuelosPorFiltroVuelos(FiltroVuelosTo filtro) { Expression <Func <Vuelo, bool> > filtroInfo = null; Expression <Func <Vuelo, bool> > predicateAuxiliar = null; switch (filtro.CriterioBusquedaOrigen) { case FiltroVueloOrigen.IdOrigen: filtroInfo = v => v.IdOrigen == filtro.IdOrigen; break; case FiltroVueloOrigen.IdCiudadOrigen: filtroInfo = v => v.Origen.Aeropuerto.IdCiudad == filtro.IdOrigen; break; case FiltroVueloOrigen.IdPaisOrigen: filtroInfo = v => v.Origen.Aeropuerto.Ciudad.Estado.IdPais == filtro.IdOrigen; break; } if (filtro.FechaOrigen != null) { DateTime fecha = filtro.FechaOrigen.Value.Date; predicateAuxiliar = v => v.HoraSalida >= fecha; } else { DateTime fecha = DateTime.UtcNow.Date; predicateAuxiliar = v => v.HoraSalida >= fecha; } filtroInfo = filtroInfo.And(predicateAuxiliar); switch (filtro.CriterioBusquedaDestino) { case FiltroVueloDestino.IdDestino: predicateAuxiliar = v => v.IdDestino == filtro.IdDestino; break; case FiltroVueloDestino.IdCiudadDestino: predicateAuxiliar = v => v.Destino.Aeropuerto.IdCiudad == filtro.IdDestino; break; case FiltroVueloDestino.IdPaisDestino: predicateAuxiliar = v => v.Destino.Aeropuerto.Ciudad.Estado.IdPais == filtro.IdDestino; break; } filtroInfo = filtroInfo.And(predicateAuxiliar); if (filtro.FechaDestino != null) { DateTime fecha = filtro.FechaOrigen.Value.Date.AddDays(1).AddMilliseconds(-1); predicateAuxiliar = v => v.HoraLlegada <= fecha; } else { DateTime fecha = DateTime.UtcNow.AddDays(31).Date.AddMilliseconds(-1); predicateAuxiliar = v => v.HoraLlegada <= fecha; } filtroInfo = filtroInfo.And(predicateAuxiliar); return(filtroInfo); }