【发布时间】:2013-05-07 13:16:13
【问题描述】:
在像下面这样的树中,每个项目只知道其父 ID 和订单号,那么查询 Foo 的所有后代的好方法是什么?
- 1:富
- 2:孩子
- 3:孙子 1
- 4:孙子 2
- 2:孩子
- 5:酒吧
- 6:巴兹
我可以得到这样的孩子
var q = from item in foos
where item.parentid == "Foo"
select item;
但是我怎样才能在单个查询中将所有后代都获取到任意深度?如果可能,我想避免使用多个查询进行递归。具体来说,我想获得所有可能级别的后代,不仅是子孙,还包括第 n 级子孙。我想我可以使用这种情况下的订单号和类似的查询
var q = from item in foos
where item.ordernumber > 1 && item.ordernumber < 5
select item;
但在这种情况下,我不知道如何获得5,即下一个非后代订单号。此时,1 始终是已知的。
编辑:添加了我希望它选择所有后代的被遗忘的细节,而不仅仅是孩子和孙子。
【问题讨论】:
-
我不确定我是否理解您的问题。你想要
foo的所有孩子吗? -
我要 foo 的所有后代,意思是“子、孙 1 和孙 2”,共 3 项。希望能澄清一些事情。各位用户,如果不清楚,请投票支持@JensKloster 的评论,我将编辑问题。
-
好的。你能展示你的课吗?
Foo是否有Child的集合或只有一个。Foo、Child、GrandChild1和Grandchild2是同一类型吗? -
这更像是一个关于算法的理论问题 :) 稍后我可能会做一个例子,但现在:它们都是相同的类型,比如说
Item。所有项目都具有三个属性,例如string id "Foo"、string parentid null和int ordernumber 1或另一个示例:string id "Grandchild 1"、string parentid "Child"和int ordernumber 3- 根本没有其他属性。 -
看起来这个问题有点太理论化了,我实际上正在考虑在这一点上删除它,只是解决递归......
标签: algorithm linq linq-to-entities