Pobierz wszystkie dzieci na jedną listę - Rekursywne C #

C # | .NET 4.5 | Entity Framework 5

Mam klasę w Entity Framework, która wygląda tak:

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

Identyfikator to identyfikator lokalizacji, ParentID łączy go z rodzicem, a Children zawiera wszystkie lokalizacje potomne lokalizacji nadrzędnej. Szukam jakiegoś łatwego sposobu, prawdopodobnie rekurencyjnie, aby wszystkie „Lokalizacje” i ich dzieci znalazły się na jednej Liście zawierającej lokalizację Location.ID. Mam problem z konceptualizacją tego rekurencyjnie. Każda pomoc jest doceniana.

To jest to, co mam do tej pory, jego rozszerzenie do klasy encji, ale wierzę, że można to zrobić lepiej / prościej:

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

AKTUALIZOWANY

W końcu napisałem rekursję w SQL, rzucając to w SP, a następnie wciągając to do Entity. Wydawało mi się, że jest czystszy i łatwiejszy niż używanie Linq, a sądząc po komentarzach Linq i Entity nie wydają się najlepszą drogą. Dziękuję za wszelką pomoc!

questionAnswers(8)

yourAnswerToTheQuestion