将所有子项放入一个列表中 - 递归 C#

12 浏览
0 Comments

将所有子项放入一个列表中 - 递归 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 Children {get;set;}
}

ID是位置的标识符,ParentID将其与父位置关联,Children包含父位置的所有子位置。我正在寻找一种简单的方式,可能是递归地,将所有"Location"及其子位置获取到一个包含Location.ID的单一列表中。我在概念上遇到了困难。感谢任何帮助。

这是我目前的代码,它是实体类的扩展,但我相信它可以更好/更简单地完成:

public List GetAllDescendants()
{
    List returnList = new List();
    List result = new List();
    result.AddRange(GetAllDescendants(this, returnList));
    return result;
}
public List GetAllDescendants(Location oID, ICollection list)
{
    list.Add(oID);
    foreach (Location o in oID.Children)
    {
            if (o.ID != oID.ID)
                    GetAllDescendants(o, list);
    }
    return list.ToList();
}

更新

最终我写了一个递归的SQL存储过程,然后将其引入Entity。对我来说,这似乎更干净、更简单,而且根据评论来看,Linq和Entity似乎不是最好的选择。感谢所有的帮助!

0