У меня есть эта модель проекта:
public class Project
{
public int Id { get; set; }
public int? ParentId { get; set; }
public Member ProjectOwner { get; set; }
public List<Project> ChildProjects { get; set; }
// ... more properties
}
Я хочу загрузить все дочерние проекты и их ProjectOwner
для всех проектов. В моей настройке нет заданного ограничения на длину хвоста потомков, пока мы не доберемся до «листа».
В данный момент я делаю это для Index
-view (да, это ужасно!):
List<Project> projects = await db.Projects
.Where(p => p.ParentId == null)
.Include(o => o.ProjectOwner)
.Include(c => c.ChildProjects)
.ThenInclude(o => o.ProjectOwner)
.Include(c => c.ChildProjects)
.ThenInclude(c => c.ChildProjects)
.ThenInclude(o => o.ProjectOwner)
.Include(c => c.ChildProjects)
.ThenInclude(c => c.ChildProjects)
.ThenInclude(c => c.ChildProjects)
.ThenInclude(c => c.ProjectOwner)
.Include(c => c.ChildProjects)
.ThenInclude(c => c.ChildProjects)
.ThenInclude(c => c.ChildProjects)
.ThenInclude(c => c.ChildProjects)
.ThenInclude(c => c.ProjectOwner)
.Include(c => c.ChildProjects)
.ThenInclude(c => c.ChildProjects)
.ThenInclude(c => c.ChildProjects)
.ThenInclude(c => c.ChildProjects)
.ThenInclude(c => c.ChildProjects)
.ThenInclude(c => c.ProjectOwner)
// ... and so on ... (!)
.ToListAsync();
Как я могу загрузить все более эффективным и динамичным способом? Код выше ограничен фиксированным количеством уровней. Я не могу этого получить.
Я задал похожий вопрос несколько дней назад, но не смог ничего сделать из ответов.