日期:2014-05-20  浏览次数:21270 次

Linq To Sql 如何实现递归查询 树形结构
CREATE TABLE [dbo].[MenuInfo](
[Id] [bigint] PRIMARY KEY IDENTITY(1,1) NOT NULL,
[Name] [varchar](50) NOT NULL,
[Parent] [bigint] NOT NULL,
[Type] [int] NULL,
[Url] [varchar](100) NULL,
[Flag] [int] NULL,
[Note] [varchar](200) NULL
)

需求:查询指定节点下的所有节点,即指定节点下的所有子级节点以及子级节点下的子级节点。。。
无限递归直到不存在子级节点。

sql 的实现是这样的
WITH temp
AS
(
--父项
SELECT * FROM MenuInfo WHERE Parent = 3
UNION ALL
--递归结果集中的下级
SELECT m.* FROM MenuInfo AS m
INNER JOIN temp AS child ON m.Parent = child.Id
)
SELECT * FROM temp

请高手赐教linq to sql 语句该如何写

分不多,请见谅。。。

------解决方案--------------------
哥,这便是.net砖区,sql建议去sql那边的高手多些!
------解决方案--------------------
你可以把你的逻辑直接写成存储过程,然后在dbml文件内映射此存储过程为相应的方法
然后直接 dataContxt.存储过程名 进行调用,返回最终结果
------解决方案--------------------
C# code

public IEnumerable<MenuInfo> GetClassID(int p_id)
        {
            var query = from c in this.MenuInfo
                        where c.Parent  == (long)p_id
                        select c;
         
           return  query.ToList().Concat(query.ToList().SelectMany(t => GetClassID((int)t.Id)));              
        }