LINQ TO SQL 实现无限递归查询

原文:http://blog.csdn.net/q107770540/article/details/7708418

[sql]  view plain copy
  1. --构造测试数据: 只作演示用  
  2. CREATE TABLE [dbo].[Tim_LinqTable](  
  3. [Id] int PRIMARY KEY IDENTITY(1,1) NOT NULL,  
  4. [Name] [varchar](50) NOT NULL,  
  5. [Parent] int NOT NULL,  
  6. )  
  7. GO  
  8.   
  9. INSERT INTO [Tim_LinqTable]    
  10. SELECT 'A',0 UNION ALL  
  11. SELECT 'A1',1 UNION ALL  
  12. SELECT 'A2',1 UNION ALL  
  13. SELECT 'B1',2 UNION ALL  
  14. SELECT 'B2',3 UNION ALL  
  15. SELECT 'C1',4 UNION ALL  
  16. SELECT 'C2',4 UNION ALL  
  17. SELECT 'D1',5 UNION ALL  
  18. SELECT 'D2',5 UNION ALL  
  19. SELECT 'D3',5   
  20. GO  
  21.   
  22. WITH temp  
  23. AS  
  24. (  
  25. SELECT * FROM [Tim_LinqTable]  WHERE Parent = 3  
  26. UNION ALL  
  27. SELECT m.* FROM [Tim_LinqTable]  AS m  
  28. INNER JOIN temp AS child ON m.Parent = child.Id  
  29. )  
  30. SELECT * FROM temp  
  31. GO  
  32.   
  33. --查询 Parent=3 的所有子数据结果如下:  
  34. Id          Name                                               Parent  
  35. ----------- -------------------------------------------------- -----------  
  36. 5           B2                                                 3  
  37. 8           D1                                                 5  
  38. 9           D2                                                 5  
  39. 10          D3                                                 5  
  40.   
  41. (4 row(s) affected)  


[csharp]  view plain copy
  1. //好,下边来看看用C#怎么实现上边的SQL语句吧:  
  2. void Main()  
  3. {  
  4.      var query=GetSonID(3);  
  5.      Console.WriteLine("Id\tName\tParent");  
  6.      query.ToList().ForEach(q=>Console.WriteLine("{0}\t{1}\t{2}",q.Id,q.Name,q.Parent));  
  7.      /* 
  8.         Id       Name       Parent 
  9.         5        B2         3 
  10.         8        D1         5 
  11.         9        D2         5 
  12.             10        D3         5 
  13.      */  
  14. }  
  15. public IEnumerable<Tim_LinqTable> GetSonID(int p_id)  
  16. {  
  17.     var query = from c in this.Tim_LinqTables  
  18.            where c.Parent  == p_id  
  19.            select c;  
  20.            
  21.     return  query.ToList().Concat(query.ToList().SelectMany(t => GetSonID(t.Id)));                
  22. }  


更多LINQ知识分享,请参考:
http://blog.csdn.net/q107770540

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值