public HabitacionDisponible habitacionDisponible(System.DateTime fechaInicio, System.DateTime fechaFinal, string tipo) { HabitacionDisponible habitDisponible = new HabitacionDisponible(); habitDisponible = null; Habitacion habitacion = new Habitacion(); Tipo_Habitacion tipoHabitacion = new Tipo_Habitacion(); RepositorioImagen repoImagen = new RepositorioImagen(); ImagenesJunior imagenJunior = repoImagen.obtenerImagenesJunior(); ImagenesStandard imagenStandard = repoImagen.obtenerImagenesStandard(); ImagenesSuite imagenSuite = repoImagen.obtenerImagenesSuite(); try { contexto.actualiza_Estado_Habitacion(); int cambioFecha = 0; while (habitDisponible == null) { var habitaciones = from Habitacion h in contexto.Habitacion join Tipo_Habitacion th in contexto.Tipo_Habitacion on h.tipo_Habitacion_Habitacion equals th.nombre_Tipo_Habitacion where th.nombre_Tipo_Habitacion == tipo select new { h.estado_Habitacion, h.numero_Habitacion, h.tipo_Habitacion_Habitacion, th.descripcion_Tipo_Habitacion, th.nombre_Tipo_Habitacion, th.tarifa_Tipo_Habitacion, }; foreach (var miHabitacion in habitaciones) { var reservada = from Reservacion r in contexto.Reservacion where r.idHabitacion_Reservacion == miHabitacion.numero_Habitacion select new { r.id_Reservacion, r.fechaLLegada_Reservacion, r.fechaSalida_Reservacion, r.idCliente_Reservacion, r.idHabitacion_Reservacion, }; if (reservada.Count() > 0) { foreach (var reserv in reservada) { if (fechaInicio >= reserv.fechaLLegada_Reservacion && fechaInicio <= reserv.fechaSalida_Reservacion || fechaFinal >= reserv.fechaLLegada_Reservacion && fechaFinal <= reserv.fechaSalida_Reservacion || reserv.fechaLLegada_Reservacion >= fechaInicio && reserv.fechaLLegada_Reservacion <= fechaFinal || reserv.fechaSalida_Reservacion >= fechaInicio && reserv.fechaSalida_Reservacion <= fechaFinal) { break; } else { habitDisponible = getHabitDisponible(miHabitacion.estado_Habitacion, miHabitacion.numero_Habitacion, miHabitacion.tipo_Habitacion_Habitacion, miHabitacion.descripcion_Tipo_Habitacion, miHabitacion.tarifa_Tipo_Habitacion, fechaInicio, fechaFinal, imagenStandard, imagenSuite, imagenJunior); if (cambioFecha == 1) { habitDisponible.mensaje = "No pudimos encontrar una habitacion en dentro de las fechas indicadas," + " sin embargo," + "le ofrecemos una habitacion similar para estas fechas"; } else { habitDisponible.mensaje = "Hemos encontrado esta habitacion para usted"; } return(habitDisponible); } } } else { habitDisponible = getHabitDisponible(miHabitacion.estado_Habitacion, miHabitacion.numero_Habitacion, miHabitacion.tipo_Habitacion_Habitacion, miHabitacion.descripcion_Tipo_Habitacion, miHabitacion.tarifa_Tipo_Habitacion, fechaInicio, fechaFinal, imagenStandard, imagenSuite, imagenJunior); if (cambioFecha == 1) { habitDisponible.mensaje = "No pudimos encontrar una habitacion dentro de las fechas indicadas," + " sin embargo," + "le ofrecemos una habitacion similar para estas fechas"; } else { habitDisponible.mensaje = "Hemos encontrado esta habitacion para usted"; } return(habitDisponible); } } cambioFecha = 1; fechaInicio = fechaInicio.AddDays(1); fechaFinal = fechaFinal.AddDays(1); } return(habitDisponible); } catch (Exception ex) { return(habitDisponible); } }