По сути, у вас есть иерархия людей (родитель), которая содержит других людей (детей и внуков), поэтому вы можете использовать рекурсивную функцию для обхода потомков объекта Person
.Как то так:
public class Person
{
public IEnumerable<Person> Children { get; set; }
public string Name { get; set; }
public string Link { get; set; }
}
public class PeopleHtmlGenerator
{
public string GetPeopleHtml(IEnumerable<Person> people)
{
return string.Format("<div>{0}</div>", GetChildren(people));
}
private string GetChildren(IEnumerable<Person> people)
{
StringBuilder result = new StringBuilder();
result.AppendLine("<ul>");
foreach (var person in people)
{
result.AppendLine(string.Format("<li><a href=\"{0}\">{1}</a></li>", person.Link, person.Name));
result.AppendLine(GetChildren(person.Children));
}
result.AppendLine("</ul>");
return result.ToString();
}
}