【发布时间】:2020-02-10 12:35:43
【问题描述】:
我有这个项目类:
public class Project
{
public int Id { get; set; }
public int? ParentId { get; set; }
public List<Project> ChildProjects { get; set; }
// more properties
}
这是我尝试加载任何给定项目的所有后代:
private async Task<List<Project>> LoadDescendantsOf(Project project)
{
project.ChildProjects = await db.Projects
.Where(p => p.ParentId == project.Id)
.ToListAsync();
foreach (Project childProject in project.ChildProjects)
{
yield return childProject.ChildProjects =
await LoadDescendantsOf(childProject);
}
}
...但它不起作用。我得到的错误信息是
“ProjectsController.LoadDescendantsOf(Project)”的主体不能是迭代器块,因为“Task>”不是迭代器接口类型
我尝试过使方法同步,但它是相同的错误消息,只是没有“任务”部分。
我怎样才能让它工作?
【问题讨论】:
-
不知道是否可以结合任务使用yield,但是yield只有在返回类型为
IEnumerable<T>时才有效。所以你可以尝试将返回类型更改为Task<IEnumerable<Project>> -
yield return childProject.ChildProjects = await LoadDescendantsOf(childProject);有点奇怪。
标签: c# recursion entity-framework-core yield-return