के पदानुक्रमित सेट निम्नलिखित मॉडल की एक सूची को देखते हुए वापस जाने के लिए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>)
और फिर बाद में लौट आए समूहों में टीमों की सूची से होकर गुजरेगा, लेकिन यह गलत परिणाम उत्पादन कर रहा है।
किसी के पास कोई सलाह या विचार है? एक पुनरावर्ती समारोह
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
गुजरता
public class Team
{
public ParentId {get;set;}
public IEnumerable<Team> ChildTeams{get;set;}
}
फिर, और खींच लेंगे:
तो आप टीमों के एक फ्लैट संग्रह के साथ शुरू कर रहे हैं, और आप एक पेड़ बनाना चाहते हैं? मुझे लगता है कि आपको यहां केवल LINQ से अधिक की आवश्यकता होगी (हालांकि मुझे गलत साबित होने में बहुत दिलचस्पी होगी)। जैसे ही आप टीमों के अपने संग्रह को फिर से शुरू करते हैं, आपको एक पेड़ बनाने की आवश्यकता होगी, IGrouping एस का संग्रह नहीं। –
क्षमा करें, हाँ ने उल्लेख किया होगा कि यह टीमों की एक विस्तृत सूची है। – ChrisO