首页 新闻 会员 周边

Entity Framework ESQL中的递归查询

0
悬赏园豆:50 [已解决问题] 解决于 2012-07-11 17:22

我有一个表如:

ID Pid FID

1 xx  0

2 xx 1

3 xx 1

4 xx  2

5 xx 1

6 xx 2

7 xx 6

....

FID是父类ID

如我查ID为1,能把1下面子类的2,3,4,5 ,6,7所有PID都查出来。

wjcing的主页 wjcing | 初学一级 | 园豆:118
提问于:2012-06-29 09:55
< >
分享
最佳答案
0

如果 只是要 1 的直属子类 那么

var query = from sub in table

      where sub.FID == 1

      select sub.PID

 

如果想要更下一级的, 就要用递归了

-----------------------------

更正

esql 不熟,  tsql 就可以用 cte

declare  @test table (id int , pid varchar (20), fid int)
 
--ID Pid FID
insert into @test
 
values(1, 'xx' ,  0)
,(1, 'xx',  0)
,(2, 'xx',  1)
,(3, 'xx',  1)
,(4, 'xx',  2)
,(5, 'xx',  1)
,(6, 'xx',  2)
,(7, 'xx',  6)       
       
;with c(id, pid, fid) as ( 
select id = id, pid = pid, fid = fid from @test where fid = 1   --2,3,5
union all
select t.id, t.pid, t.fid   from c join @test t
 on c.id = t.fid      
)
select * from c

 

收获园豆:32
gunsmoke | 老鸟四级 |园豆:3592 | 2012-06-29 10:19
其他回答(2)
1

没用过ESQL,但是我可以提供以下方法:

  linq-to-sql:

        from t in table

        where (t.ID ==1 && d.FID== 0) || (d.FID==1)
        select d

  sql:

SELECT [t0].[ID], [t0].[PID], [t0].[FID]

FROM [table] AS [t0]
WHERE (([t0].[ID] = 1) AND ([t0].[ParentID] = 0)) OR ([t0].[FID] = 1)

 

希望对你有帮助。

收获园豆:18
GeekSky | 园豆:172 (初学一级) | 2012-06-30 12:32
0

没找到答案,用替代方法完成了。

wjcing | 园豆:118 (初学一级) | 2012-07-11 17:21
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册