十年河东,十年河西,莫欺少年穷。
学无止境,精益求精
难得有清闲的一上午,索性写篇博客。
首先,我们需要准备一张表,如下范例:
create table TreeTable ( TreeId varchar(100) not null primary key, NodeName nvarchar(50),--名称 FatherTreeId varchar(100),--父亲Id )
为了节约时间,我直接沿用项目中的数据,作如下批量插入:
insert into TreeTable(TreeId,NodeName,FatherTreeId) select [SpClassifyId],[ClassifyName],[ParentClassifyId] from [dbo].[SM_SupplierClassify] where [ForefatherClassifyName] in(‘工程类‘,‘精装修类‘,‘设计类‘,‘营销类‘)
插入的数据,如下所示:
从上图,我们可以看出,这些数据中有四种大类,分别为:(‘工程类‘,‘精装修类‘,‘设计类‘,‘营销类‘),层级关系通过FatherTreeId构造,当然,此表中的层次不仅仅只有两级,理论上支持N级,类似这种结构的数据现实生活中有很多,如:家谱,人员组织架构,营销模式(微信的吸粉,病毒式营销),甚至传销模式等等
那么,我们如何将上述数据转变为树状结构的数据类型呢?
大家都会想到递归,但如何递归呢?
两种方法,
1、递归式查询,从根节点入手,查询多次(效率非常低,在此不作介绍)
2、一次性查询出所有数据,根据FatherTreeId,递归式查询泛型(效率高。只查询一次即可)我们介绍此种方法:
C# 递归构造树状数据结构(泛型),如何构造?如何查询?如何高效率?
原文:https://www.cnblogs.com/chenwolong/p/10688195.html