【问题标题】:Converting flat data from sql to List<Item>将平面数据从 sql 转换为 List<Item>
【发布时间】:2011-04-08 16:00:08
【问题描述】:

首先我很抱歉,如果你觉得这个问题以前被提出过,但我似乎无法围绕这个问题,虽然这不是最难做的事情..

基本上我有一个来自 sql 的查询结果,它包含几行,存在于:

id, parentid, name, description, level

level 是被视为以正整数表示的树结构的项目的深度。

现在我很想将这个平面数据解析/转换为“List&lt;Item&gt; mySqlData”,其中 Item 的组成类似于以下类定义

public class Item
    {
        public string Id { get; set; }
        public string ParentId { get; set; }
        public string Name { get; set; }
        public string Description { get; set; }
        public string List<Item> { get; set; }
    }

任何人都可以给我一些示例代码,它可能会是在列表中的递归迭代行中,同时在它们的位置添加项目..

提前致谢

【问题讨论】:

    标签: c# sql list recursion iterator


    【解决方案1】:

    假设您要构建树,并且不让数​​据乱序,您应该能够随时保持查找,即

    var idLookup = new Dictionary<int, Item>();
    var roots = new List<Item>();
    foreach([row]) {
        Item newRow = [read basic row];
        int? parentId = [read parentid]
        Item parent;
        if(parentId != null && idLookup.TryGetValue(parentId.Value, out parent)) {
            parent.Items.Add(newRow);
        } else {
            roots.Add(newRow);
        }
        idLookup.Add(newRow.Id, newRow);
    }
    

    【讨论】:

    • 你成功了,没想到使用字典更容易找到现有的父母,非常感谢!
    • 好东西!肯定帮了我。
    猜你喜欢
    • 2021-02-11
    • 2017-03-29
    • 1970-01-01
    • 2020-12-18
    • 1970-01-01
    • 2020-08-03
    • 2015-03-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多