树结构中的左右值计算
程序员文章站
2022-06-20 17:39:56
树形结构数据存储方案(简单介绍) 方案1:继承关系驱动的Schema设计 优点:直观 缺点:查询效率低 方案2:基于左右值编码的Schema设计 优点:查询效率高,无需递规 "使用参考" 在方案1的基础上计算左右值 /// /// 计算树节点左右值 /// /// 树节点集合 /// 父节点 /// ......
树形结构数据存储方案(简单介绍)
方案1:继承关系驱动的schema设计
- 优点:直观
- 缺点:查询效率低
方案2:基于左右值编码的schema设计
- 优点:查询效率高,无需递规
在方案1的基础上计算左右值
/// <summary> /// 计算树节点左右值 /// </summary> /// <param name="trees">树节点集合</param> /// <param name="parentid">父节点</param> /// <param name="left">左值,初始为1</param> /// <returns></returns> private async task<int> calcleftandright(ienumerable<projecttreedto> trees, string parentid, int left) { var right = left + 1; var result = trees.where(q => q.parentid.tostring() == parentid).tolist(); for (int i = 0; i < result.count(); i++) { right = await calcleftandright(trees, result[i].id.tostring(), right); } stringbuilder sql = new stringbuilder(); sql.append($"update project_trees set leftvalue = {left}, rightvalue = {right} where id = '{parentid}'"); await _dbcontext.database.executesqlcommandasync(sql.tostring()); return right + 1; }
上一篇: 蒸包子要蒸多久,这样出来的包子松软有嚼劲,孩子都馋哭了!
下一篇: 小孩子的记性差吃什么东西最好呢?