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)之对象加载
对象加载 延迟加载 在查询某对象时,实际上你只查询该对象.不会同时自动获取这个对象.这就是延迟加载. 例如,您可能需要查看客户数据和订单数据.你最初不一定需要检索与每个客户有关的所有订单数据.其优点是 ...
随机推荐
- 分享一个仅0.7KB的jQuery文本框输入提示插件
由于项目需要,找过几个jQuery文本框输入提示插件来用,但总是有不满意的地方,要么体积较大,要么使用不便,要么会出现把提示文字作为文本框的值的情况.于是我们自己的开发团队制作了这个最精简易用的输入提 ...
- 怎么成为PHP专家
当阅读各种和PHP相关的博客.Quora问题.Google+社区.资讯和杂 志的时候,经常会注意到在技术上出现两极分化的现象.问题均围绕在“我如何连接到一个MySQL数据库?”,或者是“我如何使得邮件 ...
- UVALive 3971 Assemble(模拟 + 二分)
UVALive 3971 题意:有b块钱.想要组装一台电脑,给出n个配件的种类,名字,价格,品质因子.若各种类配件各买一个,总价格<=b,求最差品质配件的最大品质因子. 思路: 求最大的最小值一 ...
- ELK学习笔记
一.elk框架和java1.8环境搭建 1.1: 环境说明 约定: centos6 iptables关闭 如果不关闭的话,需要开放对应的端口访问 selinux关闭 1.2: ELK简介 els:El ...
- MySQL 创建数据库及数据表
1.创建数据库 (1) 命令行创建 [root@host]# mysqladmin -u root -p create RUNOOB Enter password:****** (2) php创建 语 ...
- hadoop english
for the same 同样previously 之前地overlay v. 覆盖; 镀金variable expansion 变量替换processed for 处理 entry(entries) ...
- WP8数据存储--独立存储设置
<Grid x:Name="LayoutRoot" Background="Transparent"> <Grid.RowDefinition ...
- nginx频率限制
nginx官方版本限制IP的连接和并发分别有两个模块: HttpLimitReqModul用来限制连单位时间内连接数的模块,使用limit_req_zone和limit_req指令配合使用来达到限制. ...
- 自己动手制作更好用的markdown编辑器-01
这里文章都是从个人的github博客直接复制过来的,排版可能有点乱. 原始地址 http://benq.im 文章目录 1. 简介 2. 项目结构 3. 程序主界面 4. 拖动窗口 5. app ...
- Angular2升级到Angular4
angular4终于在两天前发布了正式版本,那么怎么升级呢?其实angular2和angular4之间属于平滑过渡,并不像1和2之间颠覆性的重写代码. npm uninstall -g @angula ...