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. 验收测试 - WebDriver 5

    验收测试 - WebDriver - 配置 什么是WebDriver 这样说好了,它翻译起来就是Web驱动,用我的经验来说,它就是驱动浏览器运行的一个驱动器 有什么作用? 就像一个司机可以驱动一台汽车 ...

  2. python对象序列化或持久化的方法

    http://blog.csdn.net/chen_lovelotus/article/details/7233293 一.Python对象持久化方法 目前为止,据我所知,在python中对象持久化有 ...

  3. html的小例子

    常用的前端实例: 1略 2.在网页商城中的图片当我们把鼠标放上去之后,图片会显示一个有颜色的外边框,图片某一部分的字体的颜色并发生改变 鼠标放上去之前 鼠标放上去之后: 实现的代码: <!DOC ...

  4. iOS-贝塞尔曲线之自定义饼图

    代码地址如下:http://www.demodashi.com/demo/11981.html 项目中需要统计数据展现, 采用了饼图形式展现. 第一步: 了解下贝塞尔曲线相关概念 贝塞尔曲线相关概念: ...

  5. Wp8滚动区域(ScrollViewer)控件的使用

    1. <StackPanel x:Name="TitlePanel" Grid.Row="0" Margin="12,17,0,28" ...

  6. 初学spring(二)

      1.spring推荐使用接口编程,配合di可以达到层与层之间解耦

  7. 异步编程C#回调方法

    1.什么是异步? 异步操作通常用于执行完成时间可能较长的任务,如打开大文件.连接远程计算机或查询数据库.异步操作在主应用程序线程以外的线程中执行.应用程序调用方法异步执行某个操作时,应用程序可在异步方 ...

  8. Mysql中处理1970年前的日期(unixtime为负数的情况)负数时间戳格式化

    客户扔过来一个bug,说是一个系统中对42岁以上的人的统计不正确,而41岁以下的人没有问题.眼睛瞟了一下托盘区里的日期,2012年3月26日,嗯,今年42岁的话,那么应该就是出生在1970年左右,马上 ...

  9. NativeViewer for VS2010

    记得非常久之前公布了一款能够在调试中可视化Mat数据的插件,只是仅仅能用于VS2012及以上.我用的是VS2010(笔记本跑10都卡的不得了,12不敢奢望),不免有些遗憾.非常高兴的say如今这个问题 ...

  10. Ionic学习笔记4_ionic路由(页面切换)

    1.1.  ionic路由机制: 状态 1.2.  ion-nav-view <body ng-controller="firstCtrl"> <a class= ...