Alle Kinder auf eine Liste bringen - Recursive C #

C # | .NET 4.5 | Entity Framework 5

Ich habe eine Klasse in Entity Framework, die so aussieht:

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

ID ist die Kennung des Speicherorts, ParentID verknüpft ihn mit einem übergeordneten Speicherort und Children enthält alle untergeordneten Speicherorte des übergeordneten Speicherorts. Ich suche nach einem einfachen Weg, wahrscheinlich rekursiv, um alle "Location" und ihre Kinder zu einer einzigen Liste zu bringen, die die Location.IDs enthält. Ich habe Probleme, dies rekursiv zu konzipieren. Jede Hilfe wird geschätzt.

Dies ist, was ich bisher habe, eine Erweiterung der Entity-Klasse, aber ich glaube, es könnte besser / einfacher gemacht werden:

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

AKTUALISIERTE

Am Ende habe ich die Rekursion in SQL geschrieben, sie in einen SP geworfen und dann in Entity gezogen. Schien mir sauberer und einfacher zu sein als die Verwendung von Linq, und nach den Kommentaren zu urteilen, scheinen Linq und Entity nicht der beste Weg zu sein. Danke für all die Hilfe!

Antworten auf die Frage(8)

Ihre Antwort auf die Frage