Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/339.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/entity-framework/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何加载特定父级的所有子级?_C#_Entity Framework_Entity Framework Core - Fatal编程技术网

C# 如何加载特定父级的所有子级?

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;} } 我想得到特定分支的所有元素作为列表。 例如,我有

在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
我的查询结果将是
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的解决方案,我将利用此选项。