LINQ TO SQL 实现无限递归查询
from:http://blog.csdn.net/q107770540/article/list
见论坛内有网友提问类似的问题已经不止一次了,
现总结一下,希望能给以后再碰到此类问题的朋友一些帮助
- --构造测试数据: 只作演示用
- CREATE TABLE [dbo].[Tim_LinqTable](
- [Id] int PRIMARY KEY IDENTITY(1,1) NOT NULL,
- [Name] [varchar](50) NOT NULL,
- [Parent] int NOT NULL,
- )
- GO
- INSERT INTO [Tim_LinqTable]
- SELECT 'A',0 UNION ALL
- SELECT 'A1',1 UNION ALL
- SELECT 'A2',1 UNION ALL
- SELECT 'B1',2 UNION ALL
- SELECT 'B2',3 UNION ALL
- SELECT 'C1',4 UNION ALL
- SELECT 'C2',4 UNION ALL
- SELECT 'D1',5 UNION ALL
- SELECT 'D2',5 UNION ALL
- SELECT 'D3',5
- GO
- WITH temp
- AS
- (
- SELECT * FROM [Tim_LinqTable] WHERE Parent = 3
- UNION ALL
- SELECT m.* FROM [Tim_LinqTable] AS m
- INNER JOIN temp AS child ON m.Parent = child.Id
- )
- SELECT * FROM temp
- GO
- --查询 Parent=3 的所有子数据结果如下:
- Id Name Parent
- ----------- -------------------------------------------------- -----------
- 5 B2 3
- 8 D1 5
- 9 D2 5
- 10 D3 5
- (4 row(s) affected)
- //好,下边来看看用C#怎么实现上边的SQL语句吧:
- void Main()
- {
- var query=GetSonID(3);
- Console.WriteLine("Id\tName\tParent");
- query.ToList().ForEach(q=>Console.WriteLine("{0}\t{1}\t{2}",q.Id,q.Name,q.Parent));
- /*
- Id Name Parent
- 5 B2 3
- 8 D1 5
- 9 D2 5
- 10 D3 5
- */
- }
- public IEnumerable<Tim_LinqTable> GetSonID(int p_id)
- {
- var query = from c in this.Tim_LinqTables
- where c.Parent == p_id
- select c;
- return query.ToList().Concat(query.ToList().SelectMany(t => GetSonID(t.Id)));
- }
LINQ TO SQL 实现无限递归查询的更多相关文章
- Linq to SQL 类型的对象图包含循环,如果禁用引用跟踪,择无法对其进行序列化。
在使用Linq to SQL并序列化一个数据对象的时候报System.InvalidOperationException异常,序列化类型 的对象时检测到循环引用. 异常信息(部分): ---> ...
- linq to sql之组装where条件下的'或'语句
之前遇到过类似的需求,即前台传入几个过滤条件,后台动态组装where. 例如,前台传入name='张三',age=10, 其余的字段,类似email,QQ之类的本次查询时不做过滤. 用linq to ...
- (转)QueryBuilder : 打造优雅的Linq To SQL动态查询
原文地址:http://www.cnblogs.com/coolcode/archive/2009/09/28/IQueryBuilder.html 首先我们来看看日常比较典型的一种查询Form 这个 ...
- LINQ to SQL语句(7)之Exists/In/Any/All/Contains
适用场景:用于判断集合中元素,进一步缩小范围. Any 说明:用于判断集合中是否有元素满足某一条件:不延迟.(若条件为空,则集合只要不为空就返回True,否则为False).有2种形式,分别为简单形式 ...
- 年终巨献 史上最全 ——LINQ to SQL语句
LINQ to SQL语句(1)之Where 适用场景:实现过滤,查询等功能. 说明:与SQL命令中的Where作用相似,都是起到范围限定也就是过滤作用的,而判断条件就是它后面所接的子句.Where操 ...
- LINQ to SQL语句(20)之存储过程
在我们编写程序中,往往需要一些存储过程,在LINQ to SQL中怎么使用呢?也许比原来的更简单些.下面我们以NORTHWND.MDF数据库中自带的几个存储过程来理解一下. 1.标量返回 在数据库中, ...
- LINQ to SQL语句(19)之ADO.NET与LINQ to SQL
它基于由 ADO.NET 提供程序模型提供的服务.因此,我们可以将 LINQ to SQL 代码与现有的 ADO.Net 应用程序混合在一起,将当前 ADO.NET 解决方案迁移到 LINQ to S ...
- LINQ to SQL语句(18)之运算符转换
运算符转换 1.AsEnumerable:将类型转换为泛型 IEnumerable 使用 AsEnumerable<TSource> 可返回类型化为泛型 IEnumerable 的参数.在 ...
- LINQ to SQL语句(17)之对象加载
对象加载 延迟加载 在查询某对象时,实际上你只查询该对象.不会同时自动获取这个对象.这就是延迟加载. 例如,您可能需要查看客户数据和订单数据.你最初不一定需要检索与每个客户有关的所有订单数据.其优点是 ...
随机推荐
- 实现一个JDK代理demo
JDK代理,非常简单地实现了动态代理(首先是实现对应的InvocationHandler:然后,以接口来为被调用目标构建代理对象,代理对象简介运行调用目标,并提供额外逻辑插入) 缺点:它是只能以接口为 ...
- jquery怎样获得父级窗体的大小
方法例如以下: $(window.parent.window).width() 注意: window能够省略.如:$(parent).width(),parent能够有多级,比方:$(parent.p ...
- activiti designer下载地址
http://www.activiti.org/designer/update/ http://www.activiti.org/designer/archived/ 这个地址貌似不能用了 ...
- MATLABR 2016 b 安装教程
1.下载相应的 MATLABR 2016 b 版本如下: 主要是下面三个文件,其中, Matlab 2016b Win64 Crack.rar 是破解文件.另两个为安装包.(本软件在win8/10上不 ...
- Note:pandas时间序列处理
Note 1.Time Series #1 from datetime import datetime now=datetime.now() now.year now.month now.day #2 ...
- 转 iOS:NSAttributedString
NSAttributedString: http://blog.csdn.net/kmyhy/article/details/8895638 CTFramesetterSuggestFrameSize ...
- nginx 限制ip访问频率和限速 (摘录)
限制某个IP同一时间段的访问次数 如何设置能限制某个IP某一时间段的访问次数是一个让人头疼的问题,特别面对恶意的ddos攻击的时候.其中CC攻击(Challenge Collapsar)是DDOS(分 ...
- SDUTOJ 2712 5-2 派生类的构造函数
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvUl9NaXNheWE=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA ...
- Vue vue-awesome-swiper 的坑
1.在vertical的场景模式下,默认的高度很奇怪,非常非常的大.完全没有规律.后来使用autoHeight好了一点.但依然有问题,问题在于它会根据swiper-slide内元素的高度自动变化叠加. ...
- [ci] 构建触发器,实现当gitlab有push动作时候,jenkins自动拉代码.
构建触发器,实现当gitlab有push动作时候,jenkins自动拉代码. 拉取gitlab代码库: jenkins安装git插件 配置gitlab服务器和jenkins服务器身份互信 jenkin ...