C# 将平面数据从sql转换为列表<;项目>;

C# 将平面数据从sql转换为列表<;项目>;,c#,sql,list,recursion,iterator,C#,Sql,List,Recursion,Iterator,首先,如果你觉得这个问题以前曾被提过,我很抱歉,但我似乎无法将我的思想集中在这个问题上,尽管这不是最难做的事情 基本上,我有一个来自sql的查询结果,其中包含多行,存在于: id, parentid, name, description, level level是以正整数表示的树状结构查看的项的深度 现在,我想将这个平面数据解析/转换为“列表mySqlData”,其中的项由以下类定义组成 public class Item { public string Id { ge

首先,如果你觉得这个问题以前曾被提过,我很抱歉,但我似乎无法将我的思想集中在这个问题上,尽管这不是最难做的事情

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

id, parentid, name, description, level
level是以正整数表示的树状结构查看的项的深度

现在,我想将这个平面数据解析/转换为“
列表mySqlData
”,其中的项由以下类定义组成

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; }
    }
公共类项目
{
公共字符串Id{get;set;}
公共字符串ParentId{get;set;}
公共字符串名称{get;set;}
公共字符串说明{get;set;}
公共字符串列表{get;set;}
}
有人能给我一些示例代码吗,它可能是在列表中递归迭代的行中,同时在它们的位置添加项


提前感谢

假设您想要构建树,并且不会使数据无序,您应该能够在运行时维护查找,即

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);
}
var idLookup=newdictionary();
变量根=新列表();
foreach([行]){
项目新行=[读取基本行];
int?parentId=[读取parentId]
项目父项;
if(parentId!=null&&idLookup.TryGetValue(parentId.Value,out parent)){
父.Items.Add(newRow);
}否则{
root.Add(newRow);
}
idLookup.Add(newRow.Id,newRow);
}

你搞定了,不会想到使用字典更容易找到现有的父母,非常感谢!好东西!当然帮助了我。