zoukankan      html  css  js  c++  java
  • LINQ TO SQL 实现无限递归查询

    from:http://blog.csdn.net/q107770540/article/list

    见论坛内有网友提问类似的问题已经不止一次了,

    现总结一下,希望能给以后再碰到此类问题的朋友一些帮助 

    [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 Name Parent");  
      6.      query.ToList().ForEach(q=>Console.WriteLine("{0} {1} {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. }  
  • 相关阅读:
    offsetLeft 和 style.left
    wampserver 使用小结,操作一:wamp 配置虚拟域名 操作二:wamp 127.0.0.1正常打开,localhost空白403/404
    多栏目显示隐藏
    javascript闭包,for循环同步和异步
    wordpress 主题模板常用内容调用代码
    ECMAScript 6 let和var区别和应用
    js jquery获取所有同级相邻元素,同tag标签,中间有间隔其他tag的不算,不是siblings
    微信小程序如何使用百度API实现身份证查询
    微信小程序视频弹幕效果
    不得不知的小程序基本知识
  • 原文地址:https://www.cnblogs.com/liuqiyun/p/8509024.html
Copyright © 2011-2022 走看看