我有一个表,其中有一个Id和parentId列。ParentId包含表中另一行的Id。如果ParentId为null,则它是层次结构的顶部。
我有一个行的Id,并且我想在层次结构中选择它上面的所有行。我能在一次select中做到这一点吗?
因此,在此示例中:
Id | parentId |其他列
1|空
2|1
3|2
如果我有id=3,我想选择行1,2,3。
我能在linq to sql中做吗?
发布于 2010-12-09 05:31:56
您可以使用recursive CTE在单个select中执行此操作,但是LINQ to SQL不支持此操作,因此您必须创建一个带有查询的存储过程,并从LINQ to SQL调用该存储过程。
发布于 2010-12-09 05:52:36
看看,使用递归CTE。
发布于 2010-12-09 06:16:51
不知道LINQ,但正如其他回答者所写的那样,许多关系数据库支持通用表表达式(CTE) -但不是所有(想到Oracle)。如果支持的话,CTE是一个检索“祖先”的好方法。
值得一提的是,还有一些其他方法可以考虑,特别是桥接表或嵌套集。See my question for some explanation of these options和其他表示分层数据的方法。简而言之,使用触发器中的CTE更新的桥接表很可能会很容易地给出所有的祖先或后代--只是不知道有多近。嵌套的set模型将为您提供此信息,以及以相对昂贵的插入和更新为代价的接近程度。
https://stackoverflow.com/questions/4392541
复制相似问题