Obter todas as crianças para uma lista - recursiva c #

C # | .NET 4.5 | Entidade Framework 5

Eu tenho uma classe no Entity Framework que se parece com isso:

public class Location
{
   public long ID {get;set;}
   public long ParentID {get;set;}
   public List<Location> Children {get;set;}
}

ID é o identificador do local, ParentID o vincula a um pai e Children contém todos os locais filhos do local pai. Eu estou procurando por alguma maneira fácil, provavelmente recursivamente, para obter todos os "Location" e seus filhos para uma única lista contendo os Location.ID's. Estou tendo problemas para conceituar isso de forma recursiva. Qualquer ajuda é apreciada.

Isto é o que eu tenho até agora, é uma extensão para a classe de entidade, mas acredito que poderia ser feito melhor / mais simples:

public List<Location> GetAllDescendants()
{
    List<Location> returnList = new List<Location>();
    List<Location> result = new List<Location>();
    result.AddRange(GetAllDescendants(this, returnList));
    return result;
}

public List<Location> GetAllDescendants(Location oID, ICollection<Location> list)
{
    list.Add(oID);
    foreach (Location o in oID.Children)
    {
            if (o.ID != oID.ID)
                    GetAllDescendants(o, list);
    }
    return list.ToList();
}

ATUALIZADA

Acabei escrevendo a recursão em SQL, lançando isso em um SP e, em seguida, puxando isso para Entity. Parecia-me mais limpo e mais fácil do que usar o Linq e, a julgar pelos comentários, o Linq e o Entity não parecem ser o melhor caminho a percorrer. Obrigado por toda a ajuda!

questionAnswers(8)

yourAnswerToTheQuestion