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)之对象加载
对象加载 延迟加载 在查询某对象时,实际上你只查询该对象.不会同时自动获取这个对象.这就是延迟加载. 例如,您可能需要查看客户数据和订单数据.你最初不一定需要检索与每个客户有关的所有订单数据.其优点是 ...
随机推荐
- 验收测试 - WebDriver 5
验收测试 - WebDriver - 配置 什么是WebDriver 这样说好了,它翻译起来就是Web驱动,用我的经验来说,它就是驱动浏览器运行的一个驱动器 有什么作用? 就像一个司机可以驱动一台汽车 ...
- python对象序列化或持久化的方法
http://blog.csdn.net/chen_lovelotus/article/details/7233293 一.Python对象持久化方法 目前为止,据我所知,在python中对象持久化有 ...
- html的小例子
常用的前端实例: 1略 2.在网页商城中的图片当我们把鼠标放上去之后,图片会显示一个有颜色的外边框,图片某一部分的字体的颜色并发生改变 鼠标放上去之前 鼠标放上去之后: 实现的代码: <!DOC ...
- iOS-贝塞尔曲线之自定义饼图
代码地址如下:http://www.demodashi.com/demo/11981.html 项目中需要统计数据展现, 采用了饼图形式展现. 第一步: 了解下贝塞尔曲线相关概念 贝塞尔曲线相关概念: ...
- Wp8滚动区域(ScrollViewer)控件的使用
1. <StackPanel x:Name="TitlePanel" Grid.Row="0" Margin="12,17,0,28" ...
- 初学spring(二)
1.spring推荐使用接口编程,配合di可以达到层与层之间解耦
- 异步编程C#回调方法
1.什么是异步? 异步操作通常用于执行完成时间可能较长的任务,如打开大文件.连接远程计算机或查询数据库.异步操作在主应用程序线程以外的线程中执行.应用程序调用方法异步执行某个操作时,应用程序可在异步方 ...
- Mysql中处理1970年前的日期(unixtime为负数的情况)负数时间戳格式化
客户扔过来一个bug,说是一个系统中对42岁以上的人的统计不正确,而41岁以下的人没有问题.眼睛瞟了一下托盘区里的日期,2012年3月26日,嗯,今年42岁的话,那么应该就是出生在1970年左右,马上 ...
- NativeViewer for VS2010
记得非常久之前公布了一款能够在调试中可视化Mat数据的插件,只是仅仅能用于VS2012及以上.我用的是VS2010(笔记本跑10都卡的不得了,12不敢奢望),不免有些遗憾.非常高兴的say如今这个问题 ...
- Ionic学习笔记4_ionic路由(页面切换)
1.1. ionic路由机制: 状态 1.2. ion-nav-view <body ng-controller="firstCtrl"> <a class= ...