Encuentre todos los descendientes en el árbol jerárquico de autorreferencia (padre-hijo)

Esto es similar a la pregunta (Encontrar padres en una jerarquía de árbol para un niño determinado LINQ (expresión lambda)) Sin embargo, en lugar de encontrar a todos los antepasados, necesito encontrar a todos los descendientes.

Estoy modificando el método de Yacoub, pero solo logré obtener todos los descendientes en una rama.

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

Respuestas a la pregunta(1)

Su respuesta a la pregunta