C# 如何加载特定父级的所有子级?
在SO中有很多相关的问题,但是没有人帮助我。 我有这样一个实体:C# 如何加载特定父级的所有子级?,c#,entity-framework,entity-framework-core,C#,Entity Framework,Entity Framework Core,在SO中有很多相关的问题,但是没有人帮助我。 我有这样一个实体: Task1 Task2 Task4 Task5 Task3 Task6 类任务对象 { 公共int Id{get;set;} 公共字符串标题{get;set;} public int?ParentId{get;set;} 公共任务对象父对象{get;set;} 公共ICollection子项{get;set;} } 我想得到特定分支的所有元素作为列表。 例如,我有
Task1
Task2
Task4
Task5
Task3
Task6
类任务对象
{
公共int Id{get;set;}
公共字符串标题{get;set;}
public int?ParentId{get;set;}
公共任务对象父对象{get;set;}
公共ICollection子项{get;set;}
}
我想得到特定分支的所有元素作为列表。例如,我有一棵这样的树:
Task1
Task2
Task4
Task5
Task3
Task6
我的查询结果将是Task2 Task4 Task5
我写了一个函数来实现它,但我认为有一个更好的解决方案:
private void getSubtree(TaskObject父级,列表项)
{
添加(父项);
context.Entry(parent.Collection)(t=>t.Children.Load();
foreach(parent.Children中的变量child)
{
getSubtree(子项、项);
}
}
EF Core中是否有类似于
context.Entry(parent).GetAllChildren()
的smth?没有EntityFramework中没有类似于(GetAllChildren())的方法。
使用树时,可以缓存一些路径以改进搜索和导航
如果要搜索某些节点,请加载它们的路径,直到树的顶部:
为树的节点定义属性并保存所有节点,直到树的顶部。移动节点时,也应更新该路径属性。如果您使用SQL作为数据库引擎,那么性能是您必须考虑的问题,我认为最好使用and之类的命令。@Thibault感谢您的选择。如果我没有找到类似ef的解决方案,我将利用此选项。