public static List <GrupoBeneficiarioClass> ListarGrupoBeneficiariosPorNombre(string nombre)
        {
            List <GrupoBeneficiarioClass> r = new List <GrupoBeneficiarioClass>();
            saluddbEntities        mctx     = new saluddbEntities();
            GrupoBeneficiarioClass x;


            var cur = from ben in mctx.grupoes
                      where ben.nombre.Contains(nombre)
                      select ben;


            foreach (var f in cur)
            {
                x = new GrupoBeneficiarioClass();

                x._id_grupo    = f.id_grupo;
                x._descripcion = f.descripcion;
                x._nombre      = f.nombre;

                x._beneficiarios = BeneficiarioClass.ListarBeneficiariosPorGrupo(f.id_grupo);

                r.Add(x);
            }
            return(r);
        }
        /// <summary>
        /// Lista los Grupos que el beneficiario pertenece
        /// </summary>
        /// <param name="id_beneficiario">Id del beneficiario a buscar en los grupos</param>
        /// <returns>Retorna una lista de grupos de beneficiarios</returns>
        public static List <GrupoBeneficiarioClass> ListarGruposPorBeneficiario(int id_beneficiario)
        {
            List <GrupoBeneficiarioClass> r = new List <GrupoBeneficiarioClass>();
            saluddbEntities        mctx     = new saluddbEntities();
            GrupoBeneficiarioClass x;

            var cur = from g in mctx.grupoes
                      join bg in mctx.beneficiario_grupo
                      on g.id_grupo equals bg.id_gupo
                      where bg.id_beneficiario == id_beneficiario
                      orderby g.nombre
                      select g;

            foreach (var f in cur)
            {
                x = new GrupoBeneficiarioClass();

                x._id_grupo    = f.id_grupo;
                x._descripcion = f.descripcion;
                x._nombre      = f.nombre;

                x._beneficiarios = BeneficiarioClass.ListarBeneficiariosPorGrupo(f.id_grupo);

                r.Add(x);
            }


            return(r);
        }
        /// <summary>
        /// Busca el grupo según el criterio de busqueda y el  parametro
        /// </summary>
        /// <param name="criterio"></param>
        /// <returns>Retorna el Beneficiario. Null en otro  caso</returns>
        public static GrupoBeneficiarioClass BuscarGrupo(String parametro, CriterioBusqueda criterio)
        {
            GrupoBeneficiarioClass r = new GrupoBeneficiarioClass();

            saluddbEntities ctx = new saluddbEntities();

            switch (criterio)
            {
            case CriterioBusqueda.Busqueda_ID:
                int id = 0;
                Int32.TryParse(parametro, out id);

                var cur = from g in ctx.grupoes
                          where g.id_grupo == id
                          select g;

                if (cur.Count() > 0)
                {
                    var f = cur.First();

                    r._id_grupo    = f.id_grupo;
                    r._descripcion = f.descripcion;
                    r._nombre      = f.nombre;

                    r._beneficiarios = BeneficiarioClass.ListarBeneficiariosPorGrupo(f.id_grupo);
                    return(r);
                }

                break;



            case CriterioBusqueda.Busqueda_Nombre:
                var cur3 = from g in ctx.grupoes
                           where g.nombre == parametro
                           select g;
                if (cur3.Count() > 0)
                {
                    var f = cur3.First();


                    r._id_grupo    = f.id_grupo;
                    r._descripcion = f.descripcion;
                    r._nombre      = f.nombre;

                    r._beneficiarios = BeneficiarioClass.ListarBeneficiariosPorGrupo(f.id_grupo);
                    return(r);
                }
                break;
            }



            return(null);
        }
        /// <summary>
        /// Lista los grupos por criterio
        /// </summary>
        /// <param name="parametro">Parámetro con el que se compara para listar</param>
        /// <param name="criterio">Criterio de búsqueda</param>
        /// <returns>Lista de grupos</returns>
        public static List <GrupoBeneficiarioClass> ListarGruposPorCriterio(string parametro, CriterioBusqueda criterio)
        {
            List <GrupoBeneficiarioClass> r = new List <GrupoBeneficiarioClass>();
            saluddbEntities        mctx     = new saluddbEntities();
            GrupoBeneficiarioClass x;


            var cur = from g in mctx.grupoes
                      select g;

            foreach (var f in cur)
            {
                bool agregar = false;
                switch (criterio)
                {
                case CriterioBusqueda.Busqueda_ID:
                    int id = 0;
                    Int32.TryParse(parametro, out id);
                    if (f.id_grupo == id)
                    {
                        agregar = true;
                    }
                    else
                    {
                        agregar = false;
                    }

                    break;

                case CriterioBusqueda.Busqueda_Nombre_Grupo:
                    agregar = f.nombre.Contains(parametro);
                    break;

                case CriterioBusqueda.Busqueda_Dni:
                    List <BeneficiarioClass>      listaBenef = BeneficiarioClass.ListarBeneficiarioPorCriterio(parametro, CriterioBusqueda.Busqueda_Dni);
                    List <GrupoBeneficiarioClass> listaGrup  = new List <GrupoBeneficiarioClass>();
                    foreach (BeneficiarioClass b in listaBenef)
                    {
                        List <GrupoBeneficiarioClass> listaGrupoBenf = GrupoBeneficiarioClass.ListarGruposPorBeneficiario(b.Id_beneficiario);

                        foreach (GrupoBeneficiarioClass g in listaGrupoBenf)
                        {
                            if (listaGrup.Contains(g))
                            {
                            }
                            else
                            {
                                listaGrup.Add(g);
                            }
                        }
                    }


                    GrupoBeneficiarioClass grupo = listaGrup.Find(g => g.Id_grupo == f.id_grupo);

                    if (grupo != null)
                    {
                        agregar = true;
                    }

                    break;

                case CriterioBusqueda.Busqueda_Nombre:
                    List <BeneficiarioClass>      listaBen = BeneficiarioClass.ListarBeneficiarioPorCriterio(parametro, CriterioBusqueda.Busqueda_Nombre);
                    List <GrupoBeneficiarioClass> listaG   = new List <GrupoBeneficiarioClass>();
                    foreach (BeneficiarioClass b in listaBen)
                    {
                        List <GrupoBeneficiarioClass> listaGrupoBenf = GrupoBeneficiarioClass.ListarGruposPorBeneficiario(b.Id_beneficiario);

                        foreach (GrupoBeneficiarioClass g in listaGrupoBenf)
                        {
                            if (listaG.Contains(g))
                            {
                            }
                            else
                            {
                                listaG.Add(g);
                            }
                        }
                    }


                    GrupoBeneficiarioClass gru = listaG.Find(g => g.Id_grupo == f.id_grupo);

                    if (gru != null)
                    {
                        agregar = true;
                    }

                    break;
                }

                if (agregar)
                {
                    x = new GrupoBeneficiarioClass();

                    x._id_grupo    = f.id_grupo;
                    x._descripcion = f.descripcion;
                    x._nombre      = f.nombre;

                    x._beneficiarios = BeneficiarioClass.ListarBeneficiariosPorGrupo(f.id_grupo);

                    r.Add(x);
                }
            }

            return(r);
        }