public List<ProyectoInversion> BuscarXFiltroConCronograma(String pStrCodSNIP, String pStrNombre, String pStrUbicacion, String pStrIdEstado)
        {
            List<ProyectoInversion> lstProyectos = new List<ProyectoInversion>();
            ProyectoInversion_DAL objProyectoInversion_DAL = new ProyectoInversion_DAL();
            try
            {
                if (String.IsNullOrWhiteSpace(pStrNombre))
                {
                    pStrNombre = "";
                }
                if (String.IsNullOrWhiteSpace(pStrUbicacion))
                {
                    pStrUbicacion = "";
                }
                if (String.IsNullOrWhiteSpace(pStrIdEstado))
                {
                    pStrIdEstado = "0";
                }

                //var lstProyectosTmp = (from pi in objContext.OP_PROYECTO_INVERSION_PUBLICA
                //                       join via in objContextIntegrado.MA_VIA on pi.coVia equals via.coVia
                //                       join exp in objContext.OP_EXPEDIENTE_TECNICO on pi.coProyecto equals exp.coProyecto
                //                       join cro in objContext.OP_CRONOGRAMA_EJECUCION on exp.coExpediente equals cro.coExpediente
                //                       where ((via.noTipoVia + " " + via.noNomVia + " " + pi.txUbicacion).ToLower().Contains(pStrUbicacion.ToLower()) || pStrUbicacion == "")
                //                       && (pi.noNombre.ToLower().Contains(pStrNombre.ToLower()) || pStrNombre == "")
                //                       && (pi.noEstado == pStrIdEstado || pStrIdEstado == "0")
                //                       select new { pi, via, exp, cro }).OrderBy(x=>x.exp.coExpediente).ThenBy(x=> x.cro.feEmision);

                ObrasPublicasEntities objContext = new ObrasPublicasEntities();
                var objResult = objContext.sp_gop_get_proy_con_cro(pStrNombre, pStrCodSNIP, pStrUbicacion, pStrIdEstado).ToList();

                List<sp_gop_get_proy_con_cro_Result> lstProyectosTmp = objResult;

                foreach (var objProyTmp in lstProyectosTmp)
                {
                    ProyectoInversion objProyecto = new ProyectoInversion();
                    objProyecto.CodSNIP = objProyTmp.coSNIP;
                    objProyecto.Nombre = objProyTmp.noNombre;
                    objProyecto.IdProyecto = objProyTmp.coProyecto;
                    objProyecto.Ubicacion = objProyTmp.txUbicacion;
                    objProyecto.NomVia = objProyTmp.noNomVia;
                    objProyecto.TipoVia = objProyTmp.noTipoVia;
                    objProyecto.IdEstado = objProyTmp.noEstado;
                    objProyecto.NomEstado = ObtieneEstados(null).Where(e => e.Id == objProyTmp.noEstado).First().Nombre;

                    objProyecto.IdExpediente = objProyTmp.coExpediente;
                    objProyecto.IdCronograma = objProyTmp.coCronograma;
                    if (objProyTmp.feEmision.HasValue)
                    {
                        objProyecto.FechaEmisionCrono = objProyTmp.feEmision.Value;
                    }
                    if (objProyTmp.nuPlazoEjecucion.HasValue)
                    {
                        objProyecto.PlazoEjecucionCrono = objProyTmp.nuPlazoEjecucion.Value;
                    }
                    lstProyectos.Add(objProyecto);
                }
            }
            catch (Exception ex)
            {
                throw new Exception(ex.ToString());
            }
            return lstProyectos;
        }