Получить всех детей в один список - рекурсивный C #
C # | .NET 4.5 | Entity Framework 5
У меня есть класс в Entity Framework, который выглядит следующим образом:
public class Location
{
public long ID {get;set;}
public long ParentID {get;set;}
public List<Location> Children {get;set;}
}
ID является идентификатором местоположения, ParentID связывает его с родителем, а Children содержит все дочерние местоположения родительского местоположения. Я ищу какой-то простой способ, вероятно, рекурсивный, чтобы получить все "Местоположение" и их детей в один список, содержащий Location.ID. У меня возникли проблемы с концептуальной рекурсивной концепцией. Любая помощь приветствуется.
Это то, что у меня есть, это расширение класса сущностей, но я считаю, что это можно сделать лучше / проще:
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();
}
ОБНОВЛЕНО
Я закончил тем, что написал рекурсию в SQL, бросил ее в SP, а затем втянул в Entity. Мне показалось, что он чище и проще, чем использование Linq, и, судя по комментариям, Linq и Entity кажутся не лучшим путем. Спасибо за помощь!