Найти всех потомков в иерархическом дереве с самообращением (родитель-потомок)

Это похоже на вопрос (Поиск родителей в древовидной иерархии для данного дочернего элемента LINQ (лямбда-выражение)). Однако вместо того, чтобы найти всех предков, мне нужно найти всех потомков.

Я модифицирую метод Якуба, но мне удалось собрать всех потомков в одну ветку.

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