의 계층 적 집합을 반환하는LINQ 재귀 쿼리는 다음과 같은 모델의 목록을 감안할 때 그룹
public class Team
{
public int TeamId { get; set; }
public int ParentTeamId { get; set; }
}
나는이
처럼 보이는 계층 구조를 검색하는 저를 가능하게 할 것이다 재귀 LINQ 쿼리를 작성하는 것을 시도하고있다Team
ChildTeams
Team
Team
ChildTeams
나는 많은 접근법을 시도해 보았지만 많은 비슷한 질문을 보았지만 아무도 특별히이 문제를 해결하지 못했습니다.
private class TeamGrouping
{
public int? ParentTeamId { get; set; }
public IEnumerable<Team> ChildTeams { get; set; }
public IEnumerable<TeamGrouping> Grouping { get; set; }
}
private IEnumerable<TeamGrouping> ToGrouping(IEnumerable<Team> teams)
{
return teams.GroupBy(t => t.ParentTeamId, (parentTeam, childTeams) => new TeamGrouping {ParentTeamId = parentTeam, ChildTeams = childTeams});
}
private IEnumerable<TeamGrouping> ToGrouping(IEnumerable<TeamGrouping> teams)
{
return teams.GroupBy(t => t.ParentTeamId, (parentTeam, childTeams) => new TeamGrouping{ParentTeamId = parentTeam, Grouping = childTeams});
}
내가 ToGrouping(IEnumerable<TeamGrouping>)
에 처음 ToGrouping(IEnumerable<Team>)
다음 다음 반환 된 그룹으로 팀의 목록을 통과 할 것이다 그러나 이것은 잘못된 결과를 생산하고있다 : I 시도 최신 시도는이 라인을 따라 갔다.
누구나 어떤 조언이나 아이디어가 있습니까?
그래서 평면 팀으로 시작하여 나무를 만들고 싶습니까? 나는 당신이 LINQ 이상을 필요로 할 것이라고 생각한다 (비록 내가 틀린 것으로 증명 될지는 몰라도). 팀 컬렉션을 반복 할 때 IGrouping 컬렉션이 아닌 트리를 만들어야합니다. –
죄송합니다. 그렇다고해서 팀의 목록이 단순하다고 언급 했어야합니다. – ChrisO