网页资讯视频图片知道文库贴吧地图采购
进入贴吧全吧搜索

 
 
 
日一二三四五六
       
       
       
       
       
       

签到排名:今日本吧第个签到,

本吧因你更精彩,明天继续来努力!

本吧签到人数:0

一键签到
成为超级会员,使用一键签到
一键签到
本月漏签0次!
0
成为超级会员,赠送8张补签卡
如何使用?
点击日历上漏签日期,即可进行补签。
连续签到:天  累计签到:天
0
超级会员单次开通12个月以上,赠送连续签到卡3张
使用连续签到卡
07月14日漏签0天
c#吧 关注:188,441贴子:822,812
  • 看贴

  • 图片

  • 吧主推荐

  • 视频

  • 游戏

  • 4回复贴,共1页
<<返回c#吧
>0< 加载中...

C#递归函数构建树形结构

  • 只看楼主
  • 收藏

  • 回复
  • 呐呐不是奈奈
  • c#攻城狮
    8
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
递归是一个很好用的函数,在实际的工作中他可以大量缩短我们的代码量,但是注意子函数一定要有一个结束条件,条件相关量一定是一个随时变化的量,不然容易玩成死循环,极度侮辱智商。。。。
递归其实可以理解成---让函数自己调用自己
要查询的表结构

返回数据结构

主方法

回调函数子方法


青铜星玩家
百度移动游戏玩家均可认证(限百度账号),去领取
活动截止:2100-01-01
去徽章馆》
  • 呐呐不是奈奈
  • c#攻城狮
    8
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
////////方法源码
public List<FullTree> GetDeptTree()
{
try
{
List<FullTree> result = new List<FullTree>();
var datalist = DBManage.BASEDB.Select<T_SYS_ORGANIZATION>()
.Where(e => e.IsDel == BoolFlag.FALSE).ToList();
//获取总节点
var fdatalist = datalist.Where(e => e.ParentID == null).ToList();
foreach(var item in fdatalist)
{
//赋值
FullTree fullTree = new FullTree();
fullTree.ID = item.ID;
fullTree.Name = item.Name;
fullTree.No = item.No;
fullTree.Remark = item.Remark;
fullTree.ShortName = item.ShortName;
fullTree.Sort = item.Sort;
fullTree.ParentID = item.ParentID;
//根据他的ID获取它的子节点,
//关于我经常使用ToList() 它具有将迭代并将每个迭代项追加到新列表中。
//这具有创建消耗内存的临时列表的效果。
//我这个功能比较简单,数据量也不大,就可以随意挥霍内存了hhhh
var childdata = datalist.Where(e => e.ParentID == item.ID).ToList();
//调用子函数判断一下有没有值
var chiletree = GetDeptChildTree(childdata, datalist);
if (chiletree != null)
{
fullTree.ChildCount = chiletree.Count;
fullTree.children = chiletree;
}
else
{
fullTree.ChildCount = 0;
}
result.Add(fullTree);
}
return result;
}
catch(Exception ex)
{
return new List<FullTree>();
}
}
private List<FullTree> GetDeptChildTree(List<T_SYS_ORGANIZATION> childdata, List<T_SYS_ORGANIZATION> datalist)
{
try
{
//先判断一下还有没有值
if (childdata != null && childdata.Count > 0)
{
List<FullTree> result = new List<FullTree>();
//循环子级列表
foreach (var item in childdata)
{
//赋值
FullTree fullTree = new FullTree();
fullTree.ID = item.ID;
fullTree.Name = item.Name;
fullTree.No = item.No;
fullTree.Remark = item.Remark;
fullTree.ShortName = item.ShortName;
fullTree.Sort = item.Sort;
fullTree.ParentID = item.ParentID;
//根据他的ID获取它的子节点,
var childlist = datalist.Where(e => e.ParentID == item.ID).ToList();
//调用子函数,注意递归函数的精髓就在这里,所以说他是自己调用自己
var chiletree = GetDeptChildTree(childlist, datalist);
//判断一下有没有值
if (chiletree != null)
{
fullTree.ChildCount = chiletree.Count;
fullTree.children = chiletree;
}
else
{
fullTree.ChildCount = 0;
}
result.Add(fullTree);
}
return result;
}
else
{
return null;
}
}
catch(Exception ex)
{
return new List<FullTree>();
}
}


青铜星玩家
百度移动游戏玩家均可认证(限百度账号),去领取
活动截止:2100-01-01
去徽章馆》
2025-07-14 09:38:16
广告
  • 贴吧用户_GQyaD5b
  • c#攻城狮
    8
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼


  • yyyhhhhhh
  • c#小菜鸟
    3
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼


登录百度账号

扫二维码下载贴吧客户端

下载贴吧APP
看高清直播、视频!
  • 贴吧页面意见反馈
  • 违规贴吧举报反馈通道
  • 贴吧违规信息处理公示
  • 4回复贴,共1页
<<返回c#吧
分享到:
©2025 Baidu贴吧协议|隐私政策|吧主制度|意见反馈|网络谣言警示