Encontre todos os descendentes na árvore hierárquica de referência própria (pai-filho)

Isso é semelhante à pergunta (Localizando pais em uma hierarquia de árvore para um determinado filho LINQ (expressão lambda)) No entanto, em vez de encontrar todos os ancestrais, preciso encontrar todos os descendentes.

Estou modificando o método de Yacoub, mas só consegui obter todos os descendentes em um único ramo.

    private IEnumerable<UserRole> FindAllChildrenRecursively(List<UserRole> allRoles, UserRole role)
{
    var child = allRoles.FirstOrDefault(x => x.ParentId == role.Id);

    if (child == null)
        return Enumerable.Empty<UserRole>();

    return new[] { child }.Concat(FindAllChildrenRecursively(allRoles, child));
}

questionAnswers(1)

yourAnswerToTheQuestion