/// <summary> /// Genera un nivel de una rama del arbol de categorias. /// </summary> /// <param name="parent">Categoria padre del nivel.</param> /// <param name="categorias">Categorias sin insertar en el arbol.</param> private void BuildBranch(Categoria parent, Categoria[] categorias) { parent.Children = categorias.Where(x => x.PadreCategoriaId == parent.Id).ToArray(); var childrenCatagorias = categorias.Where(x => x.PadreCategoriaId != parent.Id).ToArray(); parent.Children.ForEach(x => BuildBranch(x, childrenCatagorias)); }
/// <summary> /// Genera el primer nivel del arbol de categorias. /// </summary> /// <param name="categorias">Coleccion de categorias.</param> /// <returns>Coleccion de categorias con estructura de arbol.</returns> private Categoria[] BuildTree(Categoria[] categorias) { var categoriasRoot = categorias.Where(x => !x.PadreCategoriaId.HasValue).ToArray(); var childrenCategorias = categorias.Where(x => x.PadreCategoriaId.HasValue).ToArray(); categoriasRoot.ForEach(x => BuildBranch(x, childrenCategorias)); return categoriasRoot; }