Сначала вам понадобится такой объект, поэтому объект Team может быть:
public class Team
{
public ParentId {get;set;}
public IEnumerable<Team> ChildTeams{get;set;}
}
Затем рекурсивная функция
private IEnumerable<Team> BuildTeams(IEnumerable<Team> allTeams,
int? parentId)
{
var teamTree = new List<Team>();
var childTeams = allTeams.Where(o => o.ParentId == parentId).ToList();
foreach (var team in childTeams)
{
var t = new Team();
var children = BuildTeams(allTeams, team.TeamID);
t.ChildTeams = children;
teamTree.Add(t);
}
return teamTree ;
}
Первый вызов проходит через null
для родителя и вытащить все команды с нулевым родителем :), хотя я заметил, что у ваших команд нет нулевого значения для родителя, поэтому не знаете, как вы сейчас идентифицируете верхний уровень?