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. 算法导论-求x的n次方

    目录 1.分治求x的n次方思路 2.c++代码实现 内容 1.分治求x的n次方思路T(n)=Θ(lgn) 为了计算乘方数a^n,传统的做法(所谓的Naive algorithm)就是循环相乘n次,算法 ...

  2. 使用 原生js 制作插件 (javaScript音乐播放器)

    1.引用页面 index.html <!DOCTYPE html> <html lang="en"> <head> <meta chars ...

  3. android中点击事件的4种写法

    android中获取到一些控件(比如说按钮)时,一般会为其添加点击事件,android中的点击事件一共有4中写法. 假设在布局文件中声明如下 ....... <Button android:la ...

  4. FD_SET 详解

    http://blog.csdn.net/stephen_yin/article/details/7441165

  5. spring学习笔记(五)

    1.后置通知 需求:调用相应业务方法后,完成资源的关闭. a. 在beans.xml中配置 .... <beans> <!--配置被代理对象--> <bean id=&q ...

  6. 使用node.js 文档里的方法写一个web服务器

    刚刚看了node.js文档里的一个小例子,就是用 node.js 写一个web服务器的小例子 上代码 (*^▽^*) //helloworld.js// 使用node.js写一个服务器 const h ...

  7. MvcPager帮助文档 - MvcAjaxOptions 类

    表示用于 MvcPager 在 Ajax 分页模式下的选项设置,该类继承自 AjaxOptions. 公共属性: 名称 说明 默认值 AllowCache 获取或设置一个值,该值指示是否在Ajax分页 ...

  8. UDP与TCP报文格式,字段意义

    UDP报文 1.UDP有两个字段:数据字段和首部字段. 首部字段 首部字段很简单,只有8个字节,由4个字段组成,每个字段的长度都是两个字节.   1)源端口:源端口号.在需要对方回信时选用.不需要时可 ...

  9. JQuery实现ajax跨域

    AJAX 的出现使得网页可以通过在后台与服务器进行少量数据交换,实现网页的局部刷新.但是出于安全的考虑,ajax不允许跨域通信.如果尝试从不同的域请求数据,就会出现错误.如果能控制数据驻留的远程服务器 ...

  10. FPGA和DSP间基于SRIO的高速通信系统设计

    作者:陈婷,岳强,汪洋 解放军信息工程大学 摘要: 现代信号处理系统通常需要在不同处理器之间实现高速数据通信,SRIO协议由于高效率.低延时的特性被广泛使用.本文研究了在FPGA和DSP两种处理器之间 ...