/// <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;
        }