当前位置: 首页 > news >正文

C# 中替换多层级数据的 Id 和 ParentId,保持主从或父子关系不变

在C#中替换多层级数据的Id和ParentId,同时保持父子关系不变,可以通过以下步骤实现:

创建旧Id到新Id的映射:遍历所有节点,为每个旧Id生成唯一的新Id,并存储在字典中。

替换节点的Id和ParentId:使用映射表更新每个节点的Id,并将ParentId替换为对应的新Id。

示例代码: 

using System;
using System.Collections.Generic;
using System.Linq;

public class Node
{
    public int Id { get; set; }
    public int? ParentId { get; set; }
    // 其他属性...
}

public class Program
{
    public static void Main()
    {
        List<Node> nodes = GetSampleNodes();
        
        // 创建旧Id到新Id的映射
        Dictionary<int, int> idMap = new Dictionary<int, int>();
        int newId = 100; // 新Id起始值
        foreach (var node in nodes)
        {
            idMap[node.Id] = newId++;
        }

        // 替换Id和ParentId
        foreach (var node in nodes)
        {
            node.Id = idMap[node.Id];
            if (node.ParentId.HasValue)
            {
                node.ParentId = idMap[node.ParentId.Value];
            }
        }

        // 输出结果验证
        foreach (var node in nodes)
        {
            Console.WriteLine($"Id: {node.Id}, ParentId: {node.ParentId}");
        }
    }

    private static List<Node> GetSampleNodes()
    {
        return new List<Node>
        {
            new Node { Id = 1, ParentId = null },
            new Node { Id = 2, ParentId = 1 },
            new Node { Id = 3, ParentId = 1 },
            new Node { Id = 4, ParentId = 2 },
            new Node { Id = 5, ParentId = 4 }
        };
    }
}

关键点说明:

    1、映射表生成:使用字典记录旧Id与新Id的对应关系,确保新Id唯一。

    2、替换顺序:先生成所有新Id后再进行替换,避免依赖顺序问题。

    3、处理根节点:ParentId为null时无需处理,保持其不变。

输出示例:

Id: 100, ParentId: 
Id: 101, ParentId: 100
Id: 102, ParentId: 100
Id: 103, ParentId: 101
Id: 104, ParentId: 103

此方法保证原有的层级结构不变,仅替换Id值。根据需求调整新Id生成方式(如Guid、递增数字等)即可适应不同场景。

如果您喜欢此文章,请收藏、点赞、评论,谢谢,祝您快乐每一天。 

http://www.lqws.cn/news/201007.html

相关文章:

  • MySQL中的内置函数
  • 统一点云数据格式:高效转换与属性保留
  • 自适应长度惩罚强化学习的高效推理
  • Conda环境备份教程
  • Spring事务和事务传播机制
  • 隐私计算时代B端页面安全设计:数据脱敏与权限体系升级路径
  • 力扣面试150题--除法求值
  • 【力扣】2434.使用机器人打印字典序最小的字符串
  • 实战二:开发网页端界面完成黑白视频转为彩色视频
  • 腾讯开源视频生成工具 HunyuanVideo-Avatar,上传一张图+一段音频,就能让图中的人物、动物甚至虚拟角色“活”过来,开口说话、唱歌、演相声!
  • 微前端 - Native Federation使用完整示例
  • 计算机是如何⼯作的
  • 【Linux shell】shell中的变量——构建脚本逻辑的基石
  • qt使用笔记二:main.cpp详解
  • PostgreSQL 的扩展pageinspect
  • 基于Python学习《Head First设计模式》第八章 模板方法模式
  • 基于Python学习《Head First设计模式》第七章 适配器和外观模式
  • moon服务器引擎-协议生成报错
  • 意识上传伦理前夜:我们是否在创造数字奴隶?
  • Scade 语言概念 - 方程(equation)
  • 1990-2023年 地级市人工智能企业数量-社科经管实证数据
  • Linux 文件系统与 I/O 编程核心原理及实践笔记
  • Python Cookbook-7.12 在 SQLite 中储存 BLOB
  • 华为云Flexus+DeepSeek征文|Dify - LLM 云服务单机部署大语言模型攻略指南
  • 又是一年高考季
  • 台式机电脑CPU天梯图2025年6月份更新:CPU选购指南及推荐
  • 《经济学原理》第9版第6章供给、需求和政府政策
  • 性能优化笔记
  • IT学习方法与资料分享
  • Srping Cloud Gateway 跨域配置 CorsWebFilter