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. 【转】python中文转换url编码

    今天要处理百度贴吧的东西.想要做一个关键词的list,每次需要时,直接添加 到list里面就可以了.但是添加到list里面是中文的情况(比如‘丽江’),url的地址编码却是'%E4%B8%BD%E6% ...

  2. Myeclipse中文件已经上传到server文件夹下,文件也没有被占用,可是页面中无法读取和使用问题的解决方法

    这个问题是因为Myeclipse中文件不同步引起的.在Myeclipse中,project文件是由Myeclipse自己主动扫描加入的,假设在外部改动了project文件夹中的文件但又关闭了自己主动刷 ...

  3. 【招聘App】—— React/Nodejs/MongoDB全栈项目:登录注册

    前言:最近在学习Redux+react+Router+Nodejs全栈开发高级课程,这里对实践过程作个记录,方便自己和大家翻阅.最终成果github地址:https://github.com/66We ...

  4. 百度地图-修改marker图标(icon)

    百度地图-修改marker图标(icon) 学习了:https://blog.csdn.net/clh604/article/details/9412291/ 源码膜拜: var map = new ...

  5. spring 动态定时任务

    功能介绍:商品自动上架.按修改或添加时设置的自动上架时间而启动定时任务 更改商品状态为上架. spring 中配置文件 <?xml version="1.0" encodin ...

  6. Python学习笔记(四)多进程的使用

    python中多进程与Linux 下的C基本相同.   fork的基本使用   先看最简单的例子: # coding: utf-8 import os def my_fork(): pid = os. ...

  7. Linux——.bash_profile和.bashrc的区别(如何设置生效)

    /etc/profile:此文件为系统的每个用户设置环境信息,当用户第一次登录时,该文件被执行.并从/etc/profile.d目录的配置文件中搜集shell的设置./etc/bashrc:为每一个运 ...

  8. GCC与G++那些事儿

    StackOverflow上一个很有名的问题,gcc和g++到底有什么区别? 答案如下: GCC: GNU Compiler Collection 指的是GNU编译器所支持的所有不同的类型的语言 gc ...

  9. Apache代理80端口

    找到Apache下的conf\extra\httpd-vhosts.conf文件 新增以下内容于合适位置 ↓表示80端口 <VirtualHost *:80>  ServerAdmin * ...

  10. IE 页面不正常显示 错误脚本不报错 脚本调试相关

    在开发时,有时自己做的页面上的JS有错误,但是IE浏览器并不报错,这个时候有可能是因为脚本调试被禁止了. 在Internet选项的高级里面有 两个禁止脚本调试选项,把他们去掉就行.