public List<MigranteBE> ListaMigrantesInternacionales(string codPaisNacimiento, System.DateTime fecIni, System.DateTime fecFin)
        {
            AerolineaEntities MiAerolinea = new AerolineaEntities();
            List<MigranteBE> objListaBE = new List<MigranteBE>();

            //SI es internacional devuelve datos con paises

            try
            {
                var query = (from tbPasajero in MiAerolinea.PASAJERO
                             join tbReservacion in MiAerolinea.RESERVACION
                                        on tbPasajero.COD_PASAJERO equals tbReservacion.COD_PASAJERO
                             join tbVuelo in MiAerolinea.VUELO
                                        on tbReservacion.COD_VUELO equals tbVuelo.COD_VUELO
                             join tbRuta in MiAerolinea.RUTA
                                        on tbVuelo.COD_RUTA equals tbRuta.COD_RUTA
                             join tbLugar in MiAerolinea.LUGAR
                                        on tbRuta.COD_DESTINO equals tbLugar.COD_LUGAR
                             join tbPais in MiAerolinea.PAIS
                                        on tbLugar.COD_PAIS equals tbPais.COD_PAIS
                             where tbPasajero.COD_PAIS == codPaisNacimiento &&
                                    tbRuta.TIPO_RUTA == "INTERNACIONAL" &&
                             tbVuelo.FECHA_LLEGADA >= fecIni &&
                             tbVuelo.FECHA_LLEGADA <= fecFin

                             select new
                             {
                                 Codigo = tbPasajero.COD_PASAJERO,
                                 Nombre = tbPasajero.NOMBRE_PASAJERO,
                                 Apellido = tbPasajero.APELLIDO_PASAJERO,
                                 DNI = tbPasajero.DNI,
                                 Genero = tbPasajero.SEXO,
                                 NumTel = tbPasajero.NUMERO_TELEFONICO,
                                 Email = tbPasajero.EMAIL,
                                 FecNac = tbPasajero.FECHA_NACIMIENTO,
                                 PaisDestino = tbPais.NOMBRE_PAIS
                             }).Take(100);

                foreach (var resultado in query)
                {
                    MigranteBE objMigranteBE = new MigranteBE();
                    objMigranteBE.CodMigrante = resultado.Codigo;
                    objMigranteBE.NomMigrante = resultado.Nombre;
                    objMigranteBE.ApeMigrante = resultado.Apellido;
                    objMigranteBE.Dni = resultado.DNI;
                    objMigranteBE.Genero = resultado.Genero.ElementAt(0);
                    objMigranteBE.NumTelefono = resultado.NumTel;
                    objMigranteBE.Email = resultado.Email;
                    objMigranteBE.FecNac = Convert.ToDateTime(resultado.FecNac);
                    objMigranteBE.PaisDestino = resultado.PaisDestino;

                    objListaBE.Add(objMigranteBE);
                }
            }
            catch (Exception ex)
            {
                throw ex;
            }
            return objListaBE;
        }
        public List<Pasajero> GetAllPasajeros()
        {
            List<Pasajero> lista = new List<Pasajero>();

            try
            {
                AerolineaEntities miAerolinea = new AerolineaEntities();

                var query = miAerolinea.PASAJERO.ToList();

                foreach (var item in query)
                {
                    Pasajero objPasajero = new Pasajero();

                    objPasajero.CodPasajero = item.COD_PASAJERO;

                    objPasajero.NomPasajero = item.APELLIDO_PASAJERO + ", " + item.NOMBRE_PASAJERO;
                    objPasajero.DNI = item.DNI;
                    objPasajero.Email = item.EMAIL;
                    objPasajero.NumTelefono = item.NUMERO_TELEFONICO;
                    objPasajero.Nacionalidad = item.NACIONALIDAD;
                    objPasajero.Genero = item.SEXO;

                    lista.Add(objPasajero);
                }
            }
            catch (Exception ex)
            {
                throw ex;
            }

            return lista;
        }
        public List<Vuelos> ListaCantidadVuelosFechas(DateTime fecini, DateTime fecfin)
        {
            AerolineaEntities MisVuelos = new AerolineaEntities();
            List<Vuelos> objListaVuelos = new List<Vuelos>();
            try
            {

                var query = MisVuelos.usp_CantidaDeVuelosFechas(fecini, fecfin).Take(100);

                foreach (var resultado in query)
                {
                    Vuelos objVuelosBE = new Vuelos();
                    objVuelosBE.NomRuta = resultado.NOM_RUTA;
                    objVuelosBE.FecDespegue = Convert.ToDateTime(resultado.FECHA_DESPEQUE);
                    objVuelosBE.FecLlegada = Convert.ToDateTime(resultado.FECHA_LLEGADA);
                    objVuelosBE.Demanda = Convert.ToInt32(resultado.CantidadDeVuelos);

                    objListaVuelos.Add(objVuelosBE);
                }

            }
            catch (EntityException ex)
            {
                throw new Exception(ex.Message);
            }
            return objListaVuelos;
        }
        public List<Visitas> AllVisitas()
        {
            AerolineaEntities misAerolineas = new AerolineaEntities();
            List<Visitas> objListaVisitas = new List<Visitas>();

            try
            {
                // Obtenemos con LINQ el registro a consultar
                var query = (from objVisitas in misAerolineas.VW_VISITAS
                             let fullName = objVisitas.NOMBRE_PASAJERO + "_" + objVisitas.APELLIDO_PASAJERO
                             where
                                    objVisitas.TOMO_VUELO == true &&
                                    objVisitas.ESTADO_VUELO == false &&
                                    objVisitas.COD_RUTA.StartsWith("RULLI")
                             select new { fullName, objVisitas.NOM_RUTA }).Take(100);

                foreach (var resultado in query)
                {
                    Visitas objVisitasBE = new Visitas();

                    objVisitasBE.NombrePasajero = resultado.fullName;
                    objVisitasBE.NomRuta = resultado.NOM_RUTA;

                    objListaVisitas.Add(objVisitasBE);
                }

            }
            catch (Exception ex)
            {
                throw ex;
            }

            return objListaVisitas;
        }
        public PaisBE ConsultaMaximoMigrantesNacionalidad(string codPaisNacimiento)
        {
            //Pais al han migrado más las personas de cierto pais

            AerolineaEntities MiAerolinea = new AerolineaEntities();
            PaisBE objPaisBE = new PaisBE();

            try
            {
                var lCodsPasajeros = MiAerolinea.PASAJERO
                    .Where(x => x.COD_PAIS == codPaisNacimiento)
                    .Select(x=>x.COD_PASAJERO)
                    .ToList();
                var lCodVuelos = MiAerolinea.RESERVACION
                    .Where(x => lCodsPasajeros.Contains(x.COD_PASAJERO))
                    .Where(y => y.TOMO_VUELO == true)
                    .Select(m => m.COD_VUELO)
                    .ToList();
                var lCodPaisCant = MiAerolinea.VUELO
                    .Where(x => lCodVuelos.Contains(x.COD_VUELO))
                    .Where(y => y.RUTA.TIPO_RUTA == "INTERNACIONAL")
                    .GroupBy(m => m.RUTA.LUGAR.COD_PAIS)
                    .Select(g => new
                    {
                        CodPais = g.Key,
                        Cantidad = g.Count()
                    })
                    .ToList()
                    .OrderByDescending(n => n.Cantidad)
                    .First();

                var pais = MiAerolinea.PAIS
                    .Where(x => x.COD_PAIS == lCodPaisCant.CodPais)
                    .Select(p => new
                    {
                        CodPais = p.COD_PAIS,
                        NomPais = p.NOMBRE_PAIS,
                        Idioma = p.IDIOMA,
                        Moneda = p.MONEDA,
                        CantVuelos = lCodPaisCant.Cantidad
                    })
                    .First();

                objPaisBE.CodPais = pais.CodPais;
                objPaisBE.NomPais = pais.NomPais;
                objPaisBE.Idioma = pais.Idioma;
                objPaisBE.Moneda = pais.Moneda;
                objPaisBE.CantVuelos = pais.CantVuelos;
            }

            catch (Exception ex)
            {
                throw ex;
            }
            return objPaisBE;
        }
        public List<Pasajero> GetAllHistorialPasajero()
        {
            List<Pasajero> lista = new List<Pasajero>();

            try
            {
                AerolineaEntities miAerolinea = new AerolineaEntities();

                var query = miAerolinea.RESERVACION.ToList()
                    .Where(y => y.TOMO_VUELO == true)
                    .Select(x => new
                    {
                        CodPasajero = x.COD_PASAJERO,
                        NomCompletoPasajero = x.PASAJERO.APELLIDO_PASAJERO + ", " + x.PASAJERO.NOMBRE_PASAJERO,
                        LugarOrigen = x.VUELO.RUTA.LUGAR1.NOMBRE_LUGAR,
                        LugarDestino = x.VUELO.RUTA.LUGAR.NOMBRE_LUGAR,
                        FechaDespeque = x.VUELO.FECHA_DESPEQUE,
                        FechaLlegada = x.VUELO.FECHA_LLEGADA,
                        DNI = x.PASAJERO.DNI,
                        Email = x.PASAJERO.EMAIL,
                        Telefono = x.PASAJERO.NUMERO_TELEFONICO,
                        Nacionalidad = x.PASAJERO.NACIONALIDAD,
                        Genero = x.PASAJERO.SEXO
                    })
                    .Take(100);

                foreach (var item in query)
                {
                    Pasajero objPasajero = new Pasajero();
                    objPasajero.CodPasajero = item.CodPasajero;
                    objPasajero.NomPasajero = item.NomCompletoPasajero;
                    objPasajero.LugarOrigen = item.LugarOrigen;
                    objPasajero.LugarDestino = item.LugarDestino;
                    objPasajero.FechaDespeque = Convert.ToDateTime(item.FechaDespeque);
                    objPasajero.FechaLlegada = Convert.ToDateTime(item.FechaLlegada);
                    objPasajero.DNI = item.DNI;
                    objPasajero.Email = item.Email;
                    objPasajero.NumTelefono = item.Telefono;
                    objPasajero.Nacionalidad = item.Nacionalidad;
                    objPasajero.Genero = item.Genero;

                    lista.Add(objPasajero);
                }
            }
            catch (Exception ex)
            {
                throw ex;
            }
            return lista;
        }
        public List<Visitas> GetVisitas_X_Fecha(DateTime fechaInicial, DateTime fechaFinal)
        {
            AerolineaEntities misAerolineas = new AerolineaEntities();
            List<Visitas> objListaVisitas = new List<Visitas>();

            try
            {
                // Obtenemos con LINQ el registro a consultar
                var query = (from objVisitas in misAerolineas.VW_VISITAS
                            let fullName = objVisitas.NOMBRE_PASAJERO + "_" + objVisitas.APELLIDO_PASAJERO
                            where objVisitas.FECHA_DESPEQUE >= fechaInicial &&
                                   objVisitas.FECHA_LLEGADA <= fechaFinal &&
                                   objVisitas.TOMO_VUELO == true &&
                                   objVisitas.ESTADO_VUELO == false &&
                                   objVisitas.COD_RUTA.StartsWith("RULLI")
                            select new { fullName, objVisitas.NOM_RUTA, objVisitas.FECHA_DESPEQUE, objVisitas.FECHA_LLEGADA }).Take(100);
                //objPasajero.NOMBRE_PASAJERO + ' ' + objPasajero.APELLIDO_PASAJERO
                // ,objRuta.NOM_RUTA ).FirstOrDefault();

                foreach (var resultado in query)
                {
                    Visitas objVisitasBE = new Visitas();

                    objVisitasBE.NombrePasajero = resultado.fullName;
                    objVisitasBE.NomRuta = resultado.NOM_RUTA;
                    objVisitasBE.FechaDespeque = Convert.ToDateTime(resultado.FECHA_DESPEQUE);
                    objVisitasBE.FechaLlegada = Convert.ToDateTime(resultado.FECHA_LLEGADA);

                    objListaVisitas.Add(objVisitasBE);
                }

            }
            catch (Exception ex)
            {
                throw ex;
            }

            return objListaVisitas;
        }
        public List<Vuelos> ListaPrecios()
        {
            AerolineaEntities MisVuelos = new AerolineaEntities();
            List<Vuelos> objListaVuelos = new List<Vuelos>();
            try
            {
                var query = MisVuelos.usp_ListaVueloPrecios();

                foreach (var resultado in query)
                {
                    Vuelos objVuelosBE = new Vuelos();
                    objVuelosBE.PrecioVuelo = Convert.ToDecimal(resultado);

                    objListaVuelos.Add(objVuelosBE);
                }

            }
            catch (EntityException ex)
            {
                throw new Exception(ex.Message);
            }
            return objListaVuelos;
        }
        public List<Vuelos> ListaVueloPorDescripcion(String descripcion)
        {
            AerolineaEntities MisVuelos = new AerolineaEntities();
            List<Vuelos> objListaVuelos = new List<Vuelos>();

            try
            {
                var query = MisVuelos.usp_ListaVueloPorDescripcion(descripcion).Take(100);

                foreach (var resultado in query)
                {
                    Vuelos objVuelosBE = new Vuelos();

                    objVuelosBE.CodVuelo = resultado.COD_VUELO;
                    objVuelosBE.DescVuelo = resultado.DESCRIPCION_VUELO;
                    objVuelosBE.FecDespegue = Convert.ToDateTime(resultado.FECHA_DESPEQUE);
                    objVuelosBE.FecLlegada = Convert.ToDateTime(resultado.FECHA_LLEGADA);
                    objVuelosBE.PrecioVuelo = Convert.ToDecimal(resultado.PRECIO_VUELO);

                    objListaVuelos.Add(objVuelosBE);
                }
            }
            catch (Exception ex)
            {
                throw ex;
            }
            return objListaVuelos;
        }
        public List<Vuelos> ListaVueloXDescipcion()
        {
            AerolineaEntities MisVuelos = new AerolineaEntities();
            List<Vuelos> objListaVuelos = new List<Vuelos>();
            try
            {
                var query = MisVuelos.usp_ListaVueloXDescripcion().Take(100);

                foreach (var resultado in query)
                {
                    Vuelos objVuelosBE = new Vuelos();
                    objVuelosBE.DescVuelo = resultado;

                    objListaVuelos.Add(objVuelosBE);
                }

            }
            catch (EntityException ex)
            {
                throw new Exception(ex.Message);
            }
            return objListaVuelos;
        }
        public List<Vuelos> ListaVuelosPorCapacidad(int capacidad, DateTime fecini, DateTime fecfin)
        {
            AerolineaEntities MisVuelos = new AerolineaEntities();
            List<Vuelos> objListaVuelos = new List<Vuelos>();
            try
            {
                var query = MisVuelos.usp_ListaVuelosPorCapacidadFechas(capacidad, fecini, fecfin).Take(100);

                foreach (var resultado in query)
                {
                    Vuelos objVuelosBE = new Vuelos();
                    objVuelosBE.CodVuelo = resultado.COD_VUELO;
                    objVuelosBE.DescVuelo = resultado.DESCRIPCION_VUELO;
                    objVuelosBE.FecDespegue = Convert.ToDateTime(resultado.FECHA_DESPEQUE);
                    objVuelosBE.FecLlegada = Convert.ToDateTime(resultado.FECHA_LLEGADA);
                    objVuelosBE.EstadoVuelo = Convert.ToBoolean(resultado.ESTADO_VUELO);
                    objVuelosBE.PrecioVuelo = Convert.ToDecimal(resultado.PRECIO_VUELO);
                    objVuelosBE.Capacidad = Convert.ToInt32(resultado.CAPACIDAD);

                    objListaVuelos.Add(objVuelosBE);
                }

            }
            catch (EntityException ex)
            {
                throw new Exception(ex.Message);
            }
            return objListaVuelos;
        }
        public List<PaisBE> ListaPaisesMigrantes(string codPais, DateTime fecIni, DateTime fecFin)
        {
            AerolineaEntities MiAerolinea = new AerolineaEntities();
            List<PaisBE> paises = new List<PaisBE>();

            try
            {
                var query = MiAerolinea.RESERVACION
                    .Where(x =>
                    x.PASAJERO.COD_PAIS == codPais &&
                    x.VUELO.RUTA.LUGAR.COD_PAIS != codPais &&
                    x.VUELO.FECHA_LLEGADA > fecIni &&
                    x.VUELO.FECHA_LLEGADA < fecFin)
                    .Select(y => y.VUELO.RUTA.LUGAR.PAIS)
                    .GroupBy(z => z)
                    .Select(g => new
                    {
                        CodPais = g.Key.COD_PAIS,
                        NomPais = g.Key.NOMBRE_PAIS,
                        Idioma = g.Key.IDIOMA,
                        Moneda = g.Key.MONEDA,
                        CantidadVuelos = g.Count()
                    })
                    .OrderByDescending(h => h.CantidadVuelos);

                foreach (var item in query)
                {
                    PaisBE objBE = new PaisBE();
                    objBE.CodPais = item.CodPais;
                    objBE.NomPais = item.NomPais;
                    objBE.Idioma = item.Idioma;
                    objBE.Moneda = item.Moneda;
                    objBE.CantVuelos = item.CantidadVuelos;

                    paises.Add(objBE);
                }
            }
            catch (Exception ex)
            {
                throw ex;
            }
            return paises;
        }
        public List<PaisBE> ListaPaises()
        {
            AerolineaEntities MiAerolinea = new AerolineaEntities();
            List<PaisBE> objListaPais = new List<PaisBE>();

            try
            {
                var query = MiAerolinea.PAIS.ToList();

                foreach (var resultado in query)
                {
                    PaisBE objPaisBE = new PaisBE();

                    objPaisBE.CodPais = resultado.COD_PAIS;
                    objPaisBE.NomPais = resultado.NOMBRE_PAIS;

                    objListaPais.Add(objPaisBE);
                }
            }
            catch (Exception ex)
            {
                throw new Exception(ex.Message);
            }
            return objListaPais;
        }
        public List<MigranteBE> ListaMigrantesPaisesFechas(string codPaisOrigen, string codPaisDestino, System.DateTime fecIni, System.DateTime fecFin)
        {
            AerolineaEntities MiAerolinea = new AerolineaEntities();
            List<MigranteBE> objListaBE = new List<MigranteBE>();

            try
            {
                var codLDestino = from tbLugar in MiAerolinea.LUGAR
                                  where tbLugar.COD_PAIS == codPaisDestino
                                  select tbLugar.COD_LUGAR;

                var query = (from tbPasajero in MiAerolinea.PASAJERO
                             join tbReservacion in MiAerolinea.RESERVACION
                                        on tbPasajero.COD_PASAJERO equals tbReservacion.COD_PASAJERO
                             join tbVuelo in MiAerolinea.VUELO
                                        on tbReservacion.COD_VUELO equals tbVuelo.COD_VUELO
                             join tbRuta in MiAerolinea.RUTA
                                        on tbVuelo.COD_RUTA equals tbRuta.COD_RUTA
                             where tbVuelo.FECHA_LLEGADA >= fecIni &&
                                   tbVuelo.FECHA_LLEGADA <= fecFin &&
                                   tbPasajero.COD_PAIS == codPaisOrigen &&
                                   codLDestino.Contains(tbRuta.COD_DESTINO)

                             select new
                             {
                                 Codigo = tbPasajero.COD_PASAJERO,
                                 Nombre = tbPasajero.NOMBRE_PASAJERO,
                                 Apellido = tbPasajero.APELLIDO_PASAJERO,
                                 DNI = tbPasajero.DNI,
                                 Genero = tbPasajero.SEXO,
                                 NumTel = tbPasajero.NUMERO_TELEFONICO,
                                 Email = tbPasajero.EMAIL,
                                 FecNac = tbPasajero.FECHA_NACIMIENTO
                             }).Take(100);

                foreach (var resultado in query)
                {
                    MigranteBE objMigranteBE = new MigranteBE();
                    objMigranteBE.CodMigrante = resultado.Codigo;
                    objMigranteBE.NomMigrante = resultado.Nombre;
                    objMigranteBE.ApeMigrante = resultado.Apellido;
                    objMigranteBE.Dni = resultado.DNI;
                    objMigranteBE.Genero = resultado.Genero.ElementAt(0);
                    objMigranteBE.NumTelefono = resultado.NumTel;
                    objMigranteBE.Email = resultado.Email;
                    objMigranteBE.FecNac = Convert.ToDateTime(resultado.FecNac);

                    objListaBE.Add(objMigranteBE);
                }
            }
            catch (Exception ex)
            {
                throw ex;
            }
            return objListaBE;
        }
        public List<Visitas> RankingVisitasDestinosPeruanos(DateTime fechaLLegada)
        {
            AerolineaEntities misAerolineas = new AerolineaEntities();
            //  Visitas objVisitasBE = new Visitas();
            List<Visitas> RankingVisitasDestinosPeruanos = new List<Visitas>();

            try
            {
                // Obtenemos con LINQ el registro a consultar
                var query = misAerolineas.USP_RANKING_VISITAS(fechaLLegada).Take(100);

                foreach (var resultado in query)
                {

                    //objVisitasBE.NombrePasajero = resultado.fullName;
                    //objVisitasBE.NomRuta = resultado.NOM_RUTA;
                    Visitas objVisitasBE = new Visitas();
                    objVisitasBE.RankingVisitasDestinosPeruanos = Convert.ToInt32(resultado.RANKING);
                    objVisitasBE.NombreLugar = resultado.NOMBRE_LUGAR;
                    objVisitasBE.CodigoDestino = resultado.COD_DESTINO;

                    RankingVisitasDestinosPeruanos.Add(objVisitasBE);
                }
            }
            catch (Exception ex)
            {
                throw ex;
            }

            return RankingVisitasDestinosPeruanos;
        }