LINQ TO SQL 实现无限递归查询

LINQ TO SQL 实现无限递归查询

现总结一下,希望能给以后再碰到此类问题的朋友一些帮助

--构造测试数据: 只作演示用
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=GetClassID(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> GetClassID(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 => GetClassID(t.Id)));
}

LINQ TO SQL 实现无限递归查询,布布扣,bubuko.com

时间: 2024-10-20 16:29:28

LINQ TO SQL 实现无限递归查询的相关文章

在使用Linq to SQL并序列化一个数据对象的时候报System.InvalidOperationException异常,序列化类型XXX的对象时检测到循环引用。

在使用Linq to SQL并序列化一个数据对象的时候报System.InvalidOperationException异常,序列化类型 的对象时检测到循环引用. 异常信息(部分): System.Web.Services.Protocols.SoapException: 服务器无法处理请求. ---> System.InvalidOperationException: 生成 XML 文档时出错. ---> System.InvalidOperationException: 序列化类型 Web

linq to sql (Group By/Having/Count/Sum/Min/Max/Avg操作符) (转帖)

http://wenku.baidu.com/link?url=2RsCun4Mum1SLbh-LHYZpTmGFMiEukrWAoJGKGpkiHKHeafJcx2y-HVttNMb1BqJpNdwaOpCflaajFY6k36IoCH_D82bk2ccu468uzDRXvG 基于LINQ+to+Entity数据访问技术的应用研究 Group By/Having操作符 适用场景:分组数据,为我们查找数据缩小范围. 说明:分配并返回对传入参数进行分组操作后的可枚举对象.分组:延迟 1.简单形式:

LinQ to Sql

在java平台上,ORM这一块Hiberante是相当的.但是在谈到.NET平台.ORM框架就有些不一样了.Nhibernate,Nbeat和Castel,以及我要说的linQ to Sql. Tosql是微软自己的产品.现在用的或许很少了,但是如果做一个中小型的项目,开发和部署还是很好的,不必考虑第 三方库.但是Tosql毕竟是直接面对数据库的.这个操作我有些用不惯,这里就简单介绍了. 要想使用Linq to Sql,实现需要建立好数据库. Step1 建立LINQ to SQL Classe

LINQ To SQL 语法及实例大全

LINQ to SQL语句(1)之Where Where操作 适用场景:实现过滤,查询等功能. 说明:与SQL命令中的Where作用相似,都是起到范围限定也就是过滤作用的,而判断条件就是它后面所接的子句. Where操作包括3种形式,分别为简单形式.关系条件形式.First()形式.下面分别用实例举例下: 1.简单形式: 例如:使用where筛选在伦敦的客户 var q = from c in db.Customers where c.City == "London" select c

LINQ to SQL 中 Concat、Union、Intersect、Except 方法的使用

?  前言 LINQ to SQL 中需要对两个或多个数据集进行操作,比如:合并.取交集等,主要使用下面四个方法,这四个方法都是 System.Linq.IQueryable<out T> 接口的扩展方法,并且都是延迟加载方法,下面是使用的简单示例. ?  示例数据,数据表:Subject(科目表).Score(成绩表) 1.   Concat() 方法 1)   方法声明 public static IQueryable<TSource> Concat<TSource>

学习Linq To Sql

Linq To Sql 是一个非常神奇的东西 他可以让你把精力都放在业务逻辑上面,而用同一个语句操作多种关系型数据库 下面就让我们来看看他的用法.......... 数据库字段 use master go create database Learn_Linq_to_Sql go use Learn_Linq_to_Sql go create table Class ( CId int primary key identity(1,1), CName nvarchar(20) not null )

LINQ to SQL语句Concat/Union/Intersect/Except--2017年2月22日

Concat/Union/Intersect/Except操作 适用场景:对两个集合的处理,例如追加.合并.取相同项.相交项等等. Concat(连接) 说明:连接不同的集合,不会自动过滤相同项:延迟. 1.简单形式: var q = ( from c in db.Customers select c.Phone ).Concat( from c in db.Customers select c.Fax ).Concat( from e in db.Employees select e.Home

LINQ to SQL 增,删,改

添加 LINQ to SQL 向数据库中插入数据的功能由Table<T>类的InsertAllOnSubmit<TSubEntity>() 和InsertOnSubmit() 方法实现.其中,InsertOnSubmit()方法将单个实体添加,InsertAllOnSubmit<TSubEntity>()将实体的集合添加. //创建LINQDB数据库上下文的实例 LinqDBDataContext db = new LinqDBDataContext(LinqSyste

LinQ to SQL 查询

LINQ to SQL 是将对象关系映射到.NET框架中的一种实现.它可以将关系数据库映射为.NET Framework中的一些类. 然后,开发人员就可以通过使用 LINQ to SQL对数据库中的数据进行查询.修改.插入.删除等操作. LINQ to SQL类映射到SQL Server数据库中的表,这些类被称做“实体类”,实体类中的属性或字段映射到SQL server 数据库中表的列,实体类之间的关联映射到 SQL Server数据库中的外键关系,LINQ to SQL类中的方法映射为SQL