C#处理TreeView 把表从数据库中读出,这种递归该怎么写!

C#处理TreeView 把表从数据库中读出,这种递归该怎么写!,第1张

观察NODE_ID,可以得到一个规律,就是从右边去掉三个字符后,可以得到它的父NODE_ID,我们先称其为PARENT_NODE_ID吧,

对于TreeNode的成员中,有一个属性,Text,我们用来保存ADDRESS_NAME,还有一个不常用的两个属性,Tag,ToolTipText随便哪个保留NODE_ID,然后,根据PARENT_NODE_ID得到父节点,在父节点上加入一个新的节点,查找节点时,做一个递归就行了

还有一个问题,因为TreeNode,与TreeView不一样,所以方法还得重载,

就是重载的方法被递归

--构造测试数据: 只作演示用

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 mParent = childId

)

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);

ConsoleWriteLine("Id\tName\tParent");

queryToList()ForEach(q=>ConsoleWriteLine("{0}\t{1}\t{2}",qId,qName,qParent));

/

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 thisTim_LinqTables

where cParent == p_id

select c;

return queryToList()Concat(queryToList()SelectMany(t => GetClassID(tId)));

}

function selectReferee($rid){

    //查询该推荐人是否满3个人

    $sql = "SELECT  FROM talbe_name WHERE `id` = "$rid;

    $res = array();//$res为查询结果

    if(count($res)>=3){

        foreach ($res as $k=>$v){

            selectReferee($v['id']);//如果该推荐人满了3个人,则递归查询下面的所有人

        }

    }else{

        return $rid;//返回推荐人id

    }

}

大概的思路就是这样,主要是一个递归,你自己完善,测试一下

我来测一下,等会上传结果

你还有一个表没用到。

WITH cte AS (

SELECT RegionID,RegionName,RegionPID FROM [tbRegionTree] WHERE regionPID='01'

UNION ALL

SELECT dRegionID,dRegionName,dRegionPID FROM cte c inner JOIN [tbRegionTree] d ON dregionPID=cRegionID

)

SELECT FROM cte

上面是找到 01 中国的。

下面为非中国的。 条件上处理下

WITH cte AS (

SELECT RegionID,RegionName,RegionPID FROM [tbRegionTree] WHERE regionPID NOT LIKE '01%'

UNION ALL

SELECT dRegionID,dRegionName,dRegionPID FROM cte c inner JOIN [tbRegionTree] d ON dregionPID=cRegionID

)

SELECT FROM cte

with a as

(select from table1 where parentid=0

union all

select b from a,table1 b where aid=bparentid)

select from a

用with as 来实现递归

select from 表名 where pid>10

从你的示例数据无法看出完整的编码规则,以上提供的SQL语句可能不适合实际当中的其他情况,但一定能适合你的示例数据。希望采纳,谢谢!

以上就是关于C#处理TreeView 把表从数据库中读出,这种递归该怎么写!全部的内容,包括:C#处理TreeView 把表从数据库中读出,这种递归该怎么写!、Linq To Sql 如何实现递归查询 树形结构、php无限分类 数据库查询 怎么找到符合条件的推荐人,程序怎么写求帮忙等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/10203689.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-06
下一篇 2023-05-06

发表评论

登录后才能评论

评论列表(0条)

保存