none
Como llenar colecciones RRS feed

  • Pregunta

  • Hola Amigos!

    Estoy haciendo un proyecto en C# donde necesito que el desarrollo me retorne un elemento con sus respectivos valores dependiente en un coleccion, pero siempre me la retorna en 0, usando EF es muy simple, pero sin EF se me complico bastante.


    public class GrupoEntity
    {
            public GrupoEntity()
            {
                    CollectionGrupoEntity = new List<>();
            }
            public int IdGrupo { get; set; }
            public string Nombre { get; set; }
            public string Descripcion { get; set; }
            public int IdPadre { get; set; }
            public virtual ICollection<GrupoEntity> CollectionGrupoEntity { get; set; }
    }

    Los elementos que devuelve en la consulta deben ser de hasta 3 niveles 

    Ejemplo: 

    Grupo 1

    Grupo 2

       Grupo 2.1

          Grupo 2.1.1

    Grupo 3

       Grupo 3.1

       Grupo 3.2

     
    jueves, 22 de febrero de 2018 6:36

Respuestas

  • Hola, buen día. Supongo que tendrás 3 colecciones, por tanto podrías anidar dos bucles para que te hagan la agrupación.

    Aquí un ejemplo:

    class MyClass
    		{
    			public MyClass(int id, string nombre)
    			{
    				Id = id;
    				Nombre = nombre;
    			}
    
    			public MyClass(int id, int idPadre, string nombre)
    				: this(id, nombre)
    			{
    				IdPadre = idPadre;
    			}
    			public int Id { get; set; }
    			public int IdPadre { get; set; }
    			public string Nombre { get; set; }
    			public List<MyClass> Hijos { get; set; }
    		}
    		static void Main(string[] args)
    		{
    			var lista1 = new List<MyClass>()
    			{
    				new MyClass(1, "1"),
    				new MyClass(2, "2"),
    				new MyClass(3, "3"),
    				new MyClass(4, "4")
    			};
    			var lista2 = new List<MyClass>()
    			{
    				new MyClass(5, 1, "1.1"),
    				new MyClass(6, 1, "1.2"),
    				new MyClass(7, 2, "2.1"),
    				new MyClass(8, 3, "3.1"),
    				new MyClass(9, 3, "3.2"),
    				new MyClass(10, 3, "3.3"),
    				new MyClass(11, 4, "4.1"),
    			};
    			var lista3 = new List<MyClass>()
    			{
    				new MyClass(12, 6, "1.2.1"),
    				new MyClass(13, 6, "1.2.2"),
    				new MyClass(14, 10, "3.3.1")
    			};
    
    			var segundoNivelPorPadre = lista2.GroupBy(e => e.IdPadre);
    			var tercerNivelPorPadre = lista3.GroupBy(e => e.IdPadre);
    			foreach (var item in lista1)
    			{
    				var hijos = segundoNivelPorPadre.FirstOrDefault(k => k.Key == item.Id);
    				if(hijos != null)
    				{
    					item.Hijos = hijos.ToList();
    					foreach (var item2 in item.Hijos)
    					{
    						var hijos2 = tercerNivelPorPadre.FirstOrDefault(k => k.Key == item2.Id);
    						if(hijos2 != null)
    						{
    							item2.Hijos = hijos2.ToList();
    						}
    					}
    				}
    			}
    			Console.ReadKey();
    		}

    Salu2

    • Marcado como respuesta jose_boliv viernes, 23 de febrero de 2018 9:11
    jueves, 22 de febrero de 2018 7:47