我有以下列表:
List<CommentWithUser> flattened = new List<CommentWithUser>();
班级:
public class CommentWithUser
{
public comment Comment { get; set; }
public user User { get; set; }
}
我希望能够创建一个结构化的层次结构列表,其中每个注释都在其parent_id注释下。
我尝试使用this extension class但没有成功,也不知道如何从这一点开始。
她是comment
班级:
public partial class comment
{
public decimal id { get; set; }
public long user_id { get; set; }
public System.DateTime created { get; set; }
public byte status_id { get; set; }
public long reply_to_user_id { get; set; }
public Nullable<decimal> parent_comment_id { get; set; }
public string content { get; set; }
public int spam_reports { get; set; }
public Nullable<decimal> root_id { get; set; }
}
注意:注释是多线程=超过两个级别的结构。 使用:ASP.NET 4.5 / C#/ Entity Framework 6
答案 0 :(得分:1)
这样的东西?
public class CommentWithUserNode
{
public CommentWithUser Item { get; set; }
public List<CommentWithUserNode> Children { get; set; }
}
static List<CommentWithUserNode> ToHierarchical(IEnumerable<CommentWithUser> source)
{
var itemById = source.ToDictionary(
item => item.Comment.id,
item => new CommentWithUserNode { Item = item, Children = new List<CommentWithUserNode>() }
);
var rootItems = new List<CommentWithUserNode>();
foreach (var node in itemById.Values)
{
CommentWithUserNode parentNode;
if (node.Item.Comment.parent_comment_id == null)
rootItems.Add(node);
else if (itemById.TryGetValue(node.Item.Comment.parent_comment_id.Value, out parentNode))
parentNode.Children.Add(node);
}
return rootItems;
}