当前位置: 首页 > 编程语言 > C#

LINQ递归查询返回层次组集分享

时间:2023-04-10 17:37:23 C#

LINQ递归查询返回层次组集给定以下模型列表放;}publicintParentTeamId{获取;设置;我正在尝试编写一个递归linq查询,它将允许我检索一个层次结构,看起来像这样问题。我尝试过的最新尝试遵循以下原则:privateclassTeamGrouping{publicint?ParentTeamId{得到;放;}publicIEnumerableChildTeams{得到;放;}公共IEnumerable分组{得到;放;returnteams.GroupBy(t=>t.ParentTeamId,(parentTeam,childTeams)=>newTeamGrouping{ParentTeamId=parentTeam,ChildTeams=childTeams});}privateIEnumerableToGrouping(IEnumerableteams){returnteams.GroupBy(t=>t.ParentTeamId,(parentTeam,childTeams)=>newTeamGrouping{ParentTeamId=parentTeam,Grouping=childTeams});我会将团队列表传递给第一个ToGrouping(IEnumerable),然后将后续返回的组ToGrouping(IEnumerable)传递给ToGrouping(IEnumerable),但这会产生不正确的结果。有人有什么建议或想法吗?首先,您的TeamGrouping实际上比需要的要复杂一些。它所需要的只是一系列Team对象及其自身:publicclassTeamNode{publicTeamValue{get;放;}publicIEnumerableChildren{get;创建一个节点。然后我们将使用ToLookup按父ID进行分组。(使用GroupBy已经很接近这个了,但是ToLookup会更容易。)最后,我们可以将每个节点的子节点设置为该节点的查找值(请注意,如果键不存在,ILookup将返回一个空序列,所以我们的叶子将得到完美处理)。为此,我们可以通过查找父ID为null的所有节点来返回所有顶级节点。publicstaticIEnumerableCreateTree(IEnumerableallTeams){varallNodes=allTeams.Select(team=>newTeamNode(){Value=team}).ToList();varlookup=allNodes.ToLookup(team=>team.Value.ParentTeamId);foreach(varnodeinallNodes)node.Children=lookup[node.Value.TeamId];返回查找[空];首先你需要一个像这样的对象,所以一个团队对象可能是:publicclassTeam{publicParentId{get;set;}publicIEnumerableChildTeams{get;set;}}后面跟着一个递归函数privateIEnumerableBuildTeams(IEnumerableallTeams,int?parentId){varteamTree=newList();varchildTeams=allTeams.Where(o=>o.ParentId==parentId).ToList();foreach(varteaminchildTeams){vart=newTeam();varchildren=BuildTeams(allTeams,team.TeamID);t.ChildTeams=孩子们;teamTree.Add(t);}返回团队树;}第一个调用为父级传递了一个null,并将拉出所有具有null父级的团队:),尽管我注意到您的团队没有null的父级,所以不确定您如何识别当前的顶级球员?以上就是C#学习教程:LINQ递归查询返回层次组集合共享的所有内容。如果对大家有用,需要进一步了解C#学习教程,希望大家多多关注——本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如有转载请注明出处: