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!