树结构中的左右值计算

2022-10-13,

树形结构数据存储方案(简单介绍)

方案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;
        }

《树结构中的左右值计算.doc》

下载本文的Word格式文档,以方便收藏与打印。