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);
}
返回内容;
}
我同意,我认为可以用更少的代码行构建模型层次结构,从而使代码更易于维护和阅读。实际上我会分两步来做
ParentContentId==null
…我猜)…这可以通过LINQ在一行代码中完成如果你有这个想法或者你需要一个例子,请告诉我。我同意,我认为你可以用更少的代码行来构建模型层次结构,从而使代码更易于维护和阅读。实际上我会分两步来做
ParentContentId==null
…我猜)…这可以通过LINQ在一行代码中完成如果你有这个想法或者你需要一个例子,请告诉我。我同意,我认为你可以用更少的代码行来构建模型层次结构,从而使代码更易于维护和阅读。实际上我会分两步来做
ParentContentId==null
…我猜)…这可以通过LINQ在一行代码中完成如果你有这个想法或者你需要一个例子,请告诉我。我同意,我认为你可以用更少的代码行来构建模型层次结构,从而使代码更易于维护和阅读。实际上我会分两步来做
ParentContentId==null
…我猜)…这可以通过LINQ在一行代码中完成如果你有想法或者你需要一个例子,请告诉我以下是我将要做的一个例子:
// 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的项目列表