我觉得我在这里偏离轨道。我一直在敲我的键盘,我不觉得我更接近解决方案。非常感谢指导。
Models.Content
包含SubContent
类型List<Models.Content>
的属性。嵌套可以是无限的,应该是递归的。我觉得应该可以通过几行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;
}
答案 0 :(得分:3)
以下是我要做的一个例子:
// 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();
答案 1 :(得分:0)
我同意,我认为您可以用更少的代码行构建模型层次结构,从而使您的代码更易于维护和阅读。我实际上分两步完成这个......
ParentContentId == null
...我想)...这可以通过LINQ 如果您有了想法或者您需要一个示例,请告诉我