【发布时间】:2013-10-08 02:03:55
【问题描述】:
C# | .NET 4.5 |实体框架 5
我在实体框架中有一个如下所示的类:
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 更清洁、更容易,从 cmets Linq 和 Entity 来看,这似乎不是最好的选择。感谢大家的帮助!
【问题讨论】:
-
实体框架不包含与递归查询有关的任何内容。
-
是的,我正在寻找扩展此功能,请参阅我的编辑。
-
我假设您想要一个实体框架解决方案,而不是一个由实体框架延迟加载支持的 Linq To Object 解决方案......我查看了实体框架 6 源代码并希望实际添加功能...... .但是微软将相关类设置为
internal。 BAS$%^DS -
最终在 SQL 中使用递归并引用了一个 SP。感谢您的帮助!
标签: c# linq entity-framework recursion