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. 分享一个仅0.7KB的jQuery文本框输入提示插件

    由于项目需要,找过几个jQuery文本框输入提示插件来用,但总是有不满意的地方,要么体积较大,要么使用不便,要么会出现把提示文字作为文本框的值的情况.于是我们自己的开发团队制作了这个最精简易用的输入提 ...

  2. 怎么成为PHP专家

    当阅读各种和PHP相关的博客.Quora问题.Google+社区.资讯和杂 志的时候,经常会注意到在技术上出现两极分化的现象.问题均围绕在“我如何连接到一个MySQL数据库?”,或者是“我如何使得邮件 ...

  3. UVALive 3971 Assemble(模拟 + 二分)

    UVALive 3971 题意:有b块钱.想要组装一台电脑,给出n个配件的种类,名字,价格,品质因子.若各种类配件各买一个,总价格<=b,求最差品质配件的最大品质因子. 思路: 求最大的最小值一 ...

  4. ELK学习笔记

    一.elk框架和java1.8环境搭建 1.1: 环境说明 约定: centos6 iptables关闭 如果不关闭的话,需要开放对应的端口访问 selinux关闭 1.2: ELK简介 els:El ...

  5. MySQL 创建数据库及数据表

    1.创建数据库 (1) 命令行创建 [root@host]# mysqladmin -u root -p create RUNOOB Enter password:****** (2) php创建 语 ...

  6. hadoop english

    for the same 同样previously 之前地overlay v. 覆盖; 镀金variable expansion 变量替换processed for 处理 entry(entries) ...

  7. WP8数据存储--独立存储设置

    <Grid x:Name="LayoutRoot" Background="Transparent"> <Grid.RowDefinition ...

  8. nginx频率限制

    nginx官方版本限制IP的连接和并发分别有两个模块: HttpLimitReqModul用来限制连单位时间内连接数的模块,使用limit_req_zone和limit_req指令配合使用来达到限制. ...

  9. 自己动手制作更好用的markdown编辑器-01

    这里文章都是从个人的github博客直接复制过来的,排版可能有点乱. 原始地址  http://benq.im   文章目录 1. 简介 2. 项目结构 3. 程序主界面 4. 拖动窗口 5. app ...

  10. Angular2升级到Angular4

    angular4终于在两天前发布了正式版本,那么怎么升级呢?其实angular2和angular4之间属于平滑过渡,并不像1和2之间颠覆性的重写代码. npm uninstall -g @angula ...