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!