HierarchyProblem->用LinqJoin代替递归?我有一个自引用表,其中包含ID、ParentID(可为空)。因此,该表包含许多节点,每个节点可以是层次结构中的根(父节点为空),或者是层次结构的任何级别(父节点存在于表的其他位置)。给定一个任意起始节点,是否有一个优雅的linq查询将从该节点返回层次结构的所有子节点?谢谢。如果你想选择一个节点的所有直接子节点,你应该像这样做一个简单的查询:fromitemintablewhereitem.ID==parentID;selectitem如果你想选择一个节点的所有后代,这对LINQ是不可能的,因为它需要递归或LINQ(和SQL)不提供的堆栈。另见:这是我刚刚写的一个快速的:classMyTable{publicintId{get;放;公共诠释?ParentId{得到;放;}publicMyTable(intid,int?parentId){这个。编号=编号;this.ParentId=parentId;}}ListallTables=newList{newMyTable(0,null),newMyTable(1,0),newMyTable(2,1)};函数>f=null;f=(id)=>{IEnumerabletable=allTables.Where(t=>t.Id==id);如果(allTables.Where(t=>t.ParentId.HasValue&&t.ParentId.Value==table.First().Id).Count()!=0)返回表.Union(f(allTables.Where(t=>t.ParentId.HasValue&&t.ParentId.Value==table.First().Id).First().Id));否则返回表;};但我相信可以将SQL与UnionALL一起使用。我知道这是一篇旧文章,但您应该查看此扩展:http://www.scip.be/index.php?Page=ArticlesNET23我一直在使用它并且效果很好。基本上,我使用的内容与您提供的SO链接中讨论的内容类似。publicIQueryableGetCategories(父类别){varcats=(parent.Categories);foreach(cats中的类别c){cats=cats.Concat(GetCategories(c));}返回一个;CTE可能是最好的解决方案,但我现在想把所有东西都放在同一层上。以上就是C#学习教程:层次结构问题->用LinqJoin代替递归?如果所有分享的内容对你有用,需要进一步了解C#学习教程,希望大家多多关注。本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处:
