Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/322.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 数据表中的嵌套对象_C#_Recursion_Nested - Fatal编程技术网

C# 数据表中的嵌套对象

C# 数据表中的嵌套对象,c#,recursion,nested,C#,Recursion,Nested,我觉得我在这里偏离了轨道。我一直在用我的头敲击键盘,我觉得我还没有找到解决办法。如蒙指导,将不胜感激 模型。内容包含类型为列表的子内容属性。嵌套可以是无限的,应该是递归的。我觉得这应该可以通过几行LINQ和while或类似的东西来完成。我把事情搞得一团糟 private static List<Models.Content> GetAllContentFromDataSet(DataSet ds) { var content = new List<Models.Cont

我觉得我在这里偏离了轨道。我一直在用我的头敲击键盘,我觉得我还没有找到解决办法。如蒙指导,将不胜感激

模型。内容
包含类型为
列表
子内容
属性。嵌套可以是无限的,应该是递归的。我觉得这应该可以通过几行
LINQ
while
或类似的东西来完成。我把事情搞得一团糟

private static List<Models.Content> GetAllContentFromDataSet(DataSet ds)
{
    var content = new List<Models.Content>();
    var contentList = (from DataRow row in ds.Tables[0].Rows
                       select new Models.Content
                       {
                           Id = Convert.ToInt32(row["Id"]),
                           ParentContentId = Convert.ToInt32(row["ParentContentId"]),
                           c3 = Convert.ToString(row["c3"]),
                           c4 = Convert.ToString(row["c4"]),
                           c5 = Convert.ToString(row["c5"])
                       }).ToList();

    content.AddRange(NestContent(contentList));

    return content;
}

private static IEnumerable<Models.Content> NestContent(List<Models.Content> content)
{
    var toBeRemoved = new List<Models.Content>();

    foreach (var c in content)
    {
        var parent = content.FirstOrDefault(p => p.Id == c.ParentContentId);
        if (parent == null) continue;
        parent.SubContent.Add(c);
        toBeRemoved.Add(c);
    }

    foreach (var c in toBeRemoved)
    {
        content.Remove(c);
    }

    return content;
}
私有静态列表GetAllContentFromDataSet(数据集ds)
{
var content=新列表();
var contentList=(来自ds.Tables[0]中的DataRow行)
选择新型号。内容
{
Id=Convert.ToInt32(第[“Id”行]),
ParentContentId=Convert.ToInt32(行[“ParentContentId”]),
c3=Convert.ToString(第[“c3”行]),
c4=Convert.ToString(第[“c4”行]),
c5=Convert.ToString(第[“c5”行])
}).ToList();
AddRange(NestContent(contentList));
返回内容;
}
私有静态IEnumerable嵌套内容(列表内容)
{
var toBeRemoved=新列表();
foreach(内容中的var c)
{
var parent=content.FirstOrDefault(p=>p.Id==c.ParentContentId);
如果(parent==null)继续;
母公司。分包商。添加(c);
加入(c);
}
foreach(待删除的变量c)
{
内容。删除(c);
}
返回内容;
}

我同意,我认为可以用更少的代码行构建模型层次结构,从而使代码更易于维护和阅读。实际上我会分两步来做

  • 首先解析根“content”(那些具有
    ParentContentId==null
    …我猜)…这可以通过LINQ在一行代码中完成
  • 然后遍历所有子内容行(指定了ParentContentId的子内容行),并将它们“附加”到父内容(如果存在)

  • 如果你有这个想法或者你需要一个例子,请告诉我。我同意,我认为你可以用更少的代码行来构建模型层次结构,从而使代码更易于维护和阅读。实际上我会分两步来做

  • 首先解析根“content”(那些具有
    ParentContentId==null
    …我猜)…这可以通过LINQ在一行代码中完成
  • 然后遍历所有子内容行(指定了ParentContentId的子内容行),并将它们“附加”到父内容(如果存在)

  • 如果你有这个想法或者你需要一个例子,请告诉我。我同意,我认为你可以用更少的代码行来构建模型层次结构,从而使代码更易于维护和阅读。实际上我会分两步来做

  • 首先解析根“content”(那些具有
    ParentContentId==null
    …我猜)…这可以通过LINQ在一行代码中完成
  • 然后遍历所有子内容行(指定了ParentContentId的子内容行),并将它们“附加”到父内容(如果存在)

  • 如果你有这个想法或者你需要一个例子,请告诉我。我同意,我认为你可以用更少的代码行来构建模型层次结构,从而使代码更易于维护和阅读。实际上我会分两步来做

  • 首先解析根“content”(那些具有
    ParentContentId==null
    …我猜)…这可以通过LINQ在一行代码中完成
  • 然后遍历所有子内容行(指定了ParentContentId的子内容行),并将它们“附加”到父内容(如果存在)

  • 如果你有想法或者你需要一个例子,请告诉我以下是我将要做的一个例子:

    // Create a list of all items without children.
    var things = table.AsEnumerable()
                      .Select(row => new Thing
                      {
                          Id = row.Field<int>("Id"),
                          ParentId = row.Field<int>("ParentId")
                      })
                      .ToList();
    
    // Add children to each item.
    things.ForEach(t1 => t1.Children = things.Where(t2 => t2.ParentId == t1.Id).ToList());
    
    // Create a list of items that don't have a parent..
    things = things.Where(t => t.ParentId == 0).ToList();
    
    //创建一个没有子项的所有项目的列表。
    var things=table.AsEnumerable()
    .选择(行=>新事物
    {
    Id=行字段(“Id”),
    ParentId=行字段(“ParentId”)
    })
    .ToList();
    //向每个项目添加子项。
    things.ForEach(t1=>t1.Children=things.Where(t2=>t2.ParentId==t1.Id.ToList());
    //创建没有父项的项目列表。。
    things=things.Where(t=>t.ParentId==0.ToList();
    
    以下是我将要做的一个示例:

    // Create a list of all items without children.
    var things = table.AsEnumerable()
                      .Select(row => new Thing
                      {
                          Id = row.Field<int>("Id"),
                          ParentId = row.Field<int>("ParentId")
                      })
                      .ToList();
    
    // Add children to each item.
    things.ForEach(t1 => t1.Children = things.Where(t2 => t2.ParentId == t1.Id).ToList());
    
    // Create a list of items that don't have a parent..
    things = things.Where(t => t.ParentId == 0).ToList();
    
    //创建一个没有子项的所有项目的列表。
    var things=table.AsEnumerable()
    .选择(行=>新事物
    {
    Id=行字段(“Id”),
    ParentId=行字段(“ParentId”)
    })
    .ToList();
    //向每个项目添加子项。
    things.ForEach(t1=>t1.Children=things.Where(t2=>t2.ParentId==t1.Id.ToList());
    //创建没有父项的项目列表。。
    things=things.Where(t=>t.ParentId==0.ToList();
    
    以下是我将要做的一个示例:

    // Create a list of all items without children.
    var things = table.AsEnumerable()
                      .Select(row => new Thing
                      {
                          Id = row.Field<int>("Id"),
                          ParentId = row.Field<int>("ParentId")
                      })
                      .ToList();
    
    // Add children to each item.
    things.ForEach(t1 => t1.Children = things.Where(t2 => t2.ParentId == t1.Id).ToList());
    
    // Create a list of items that don't have a parent..
    things = things.Where(t => t.ParentId == 0).ToList();
    
    //创建一个没有子项的所有项目的列表。
    var things=table.AsEnumerable()
    .选择(行=>新事物
    {
    Id=行字段(“Id”),
    ParentId=行字段(“ParentId”)
    })
    .ToList();
    //向每个项目添加子项。
    things.ForEach(t1=>t1.Children=things.Where(t2=>t2.ParentId==t1.Id.ToList());
    //创建没有父项的项目列表。。
    things=things.Where(t=>t.ParentId==0.ToList();
    
    以下是我将要做的一个示例:

    // Create a list of all items without children.
    var things = table.AsEnumerable()
                      .Select(row => new Thing
                      {
                          Id = row.Field<int>("Id"),
                          ParentId = row.Field<int>("ParentId")
                      })
                      .ToList();
    
    // Add children to each item.
    things.ForEach(t1 => t1.Children = things.Where(t2 => t2.ParentId == t1.Id).ToList());
    
    // Create a list of items that don't have a parent..
    things = things.Where(t => t.ParentId == 0).ToList();
    
    //创建一个没有子项的所有项目的列表。
    var things=table.AsEnumerable()
    .选择(行=>新事物
    {
    Id=行字段(“Id”),
    ParentId=行字段(“ParentId”)
    })
    .ToList();
    //向每个项目添加子项。
    things.ForEach(t1=>t1.Children=things.Where(t2=>t2.ParentId==t1.Id.ToList());
    //创建一个没有p的项目列表