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

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

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

  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. INSERT INTO [Tim_LinqTable]
  9. SELECT 'A',0 UNION ALL
  10. SELECT 'A1',1 UNION ALL
  11. SELECT 'A2',1 UNION ALL
  12. SELECT 'B1',2 UNION ALL
  13. SELECT 'B2',3 UNION ALL
  14. SELECT 'C1',4 UNION ALL
  15. SELECT 'C2',4 UNION ALL
  16. SELECT 'D1',5 UNION ALL
  17. SELECT 'D2',5 UNION ALL
  18. SELECT 'D3',5
  19. GO
  20. WITH temp
  21. AS
  22. (
  23. SELECT * FROM [Tim_LinqTable]  WHERE Parent = 3
  24. UNION ALL
  25. SELECT m.* FROM [Tim_LinqTable]  AS m
  26. INNER JOIN temp AS child ON m.Parent = child.Id
  27. )
  28. SELECT * FROM temp
  29. GO
  30. --查询 Parent=3 的所有子数据结果如下:
  31. Id          Name                                               Parent
  32. ----------- -------------------------------------------------- -----------
  33. 5           B2                                                 3
  34. 8           D1                                                 5
  35. 9           D2                                                 5
  36. 10          D3                                                 5
  37. (4 row(s) affected)
    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. return  query.ToList().Concat(query.ToList().SelectMany(t => GetSonID(t.Id)));
    21. }

LINQ TO SQL 实现无限递归查询的更多相关文章

  1. Linq to SQL 类型的对象图包含循环,如果禁用引用跟踪,择无法对其进行序列化。

    在使用Linq to SQL并序列化一个数据对象的时候报System.InvalidOperationException异常,序列化类型 的对象时检测到循环引用. 异常信息(部分): ---> ...

  2. linq to sql之组装where条件下的'或'语句

    之前遇到过类似的需求,即前台传入几个过滤条件,后台动态组装where. 例如,前台传入name='张三',age=10, 其余的字段,类似email,QQ之类的本次查询时不做过滤. 用linq to ...

  3. (转)QueryBuilder : 打造优雅的Linq To SQL动态查询

    原文地址:http://www.cnblogs.com/coolcode/archive/2009/09/28/IQueryBuilder.html 首先我们来看看日常比较典型的一种查询Form 这个 ...

  4. LINQ to SQL语句(7)之Exists/In/Any/All/Contains

    适用场景:用于判断集合中元素,进一步缩小范围. Any 说明:用于判断集合中是否有元素满足某一条件:不延迟.(若条件为空,则集合只要不为空就返回True,否则为False).有2种形式,分别为简单形式 ...

  5. 年终巨献 史上最全 ——LINQ to SQL语句

    LINQ to SQL语句(1)之Where 适用场景:实现过滤,查询等功能. 说明:与SQL命令中的Where作用相似,都是起到范围限定也就是过滤作用的,而判断条件就是它后面所接的子句.Where操 ...

  6. LINQ to SQL语句(20)之存储过程

    在我们编写程序中,往往需要一些存储过程,在LINQ to SQL中怎么使用呢?也许比原来的更简单些.下面我们以NORTHWND.MDF数据库中自带的几个存储过程来理解一下. 1.标量返回 在数据库中, ...

  7. LINQ to SQL语句(19)之ADO.NET与LINQ to SQL

    它基于由 ADO.NET 提供程序模型提供的服务.因此,我们可以将 LINQ to SQL 代码与现有的 ADO.Net 应用程序混合在一起,将当前 ADO.NET 解决方案迁移到 LINQ to S ...

  8. LINQ to SQL语句(18)之运算符转换

    运算符转换 1.AsEnumerable:将类型转换为泛型 IEnumerable 使用 AsEnumerable<TSource> 可返回类型化为泛型 IEnumerable 的参数.在 ...

  9. LINQ to SQL语句(17)之对象加载

    对象加载 延迟加载 在查询某对象时,实际上你只查询该对象.不会同时自动获取这个对象.这就是延迟加载. 例如,您可能需要查看客户数据和订单数据.你最初不一定需要检索与每个客户有关的所有订单数据.其优点是 ...

随机推荐

  1. maven 打包不全(xml,properties文件没打进包)解决方案

    在pom.xml的build标签中加入以下代码即可 <build> <resources>            <resource>               ...

  2. Mybatis学习记录(一)---- 简单的CRUD

    1 mybatis是什么? mybatis是一个持久层的框架,是apache下的顶级项目. mybatis托管到googlecode下,再后来托管到github下(https://github.com ...

  3. selenuim-webdriver注解之@FindBy、@FindBys、@FindAll的区别

    selenium-webdriver中获取页面元素的方式有很多,使用注解获取页面元素是其中一种途径, 方式有3种:@FindBy.@FindBys.@FindAll.下文对3中类型的区别和使用场景进行 ...

  4. Json_decode:详解

    Json_decode:详解 json_decode - 对 JSON 格式的字符串进行编码   mixed json_decode ( string $json [, bool $assoc = f ...

  5. html checkbox 实现全选/取消全选

    html checkbox  实现全选/取消全选 <html> <body> <table border="1"> <tr> < ...

  6. Notepad++输入模式之改动模式、插入模式

    notepad++光标是直的,怎样让它变成竖的? 通常光标是竖的.为插入模式,光标在字符之间时输入,内容会随输入的内容向后移动,新输入的内容不会替换后面的内容. 当按一下"Insert&qu ...

  7. 【BIEE】12_查看BIEE的物理SQL

    有时候,我们在使用BIEE的时候回出现一些问题,需要借助物理SQL来进行问题分析.通过物理SQL我们就可以看到BIEE在数据库中是如何去检索出数据库. 查看物理SQL的方式 [登录BIEE]--[管理 ...

  8. windows上使用的免费连接linux终端xshell6,xftp6下载

    xshell 6 https://www.netsarang.com/download/down_form.html?code=622 xftp 6 https://www.netsarang.com ...

  9. 如何在谷歌浏览器中查看Axure做的原型HTML

    Axure RP Pro可谓是非常方便.好用的一款软件,因为它不仅能绘制出详细的产品构思,也能生成浏览器格式的产品原型.但如果想把原型拿给客户查看,需要看产品画的原型图时,但是打不开的话就悲剧了.经常 ...

  10. Cocos2dx报OpenGL error 0x0506错误

    近期做第三方sdk接入时,发现iOS8系统下,进行银联充值后,返回游戏有很大几率会报 OpenGL error 0x0506............ 之类的绘制问题,游戏卡死,花了很长时间,一直没有头 ...