TreeView might be a good choice for displaying hierarchical data. You can find lots of example for binding treeview with linq entities. However Repeater is still a choice.
The article below will be helpful about XML, LINQ and TreeView
http://www.4guysfromrolla.com/articles/042308-1.aspx
There are also ways to do this without XML Data.
You can still use Repeater like:
<asp:Repeater ID="rpParent" runat="server" OnItemDataBound="rpParent_ItemDataBound">
<ItemTemplate>
<%# Eval("Name") %>
<asp:Repeater ID="rpChild" runat="server">
<ItemTemplate>
<%# Eval("Name") %>
</ItemTemplate>
</asp:Repeater>
</ItemTemplate>
</asp:Repeater>
Code Behind:
public partial Page{
protected void rpParent_ItemDataBound(object sender, RepeaterEventArgs e){
Item ParentItem = e.Item.DataItem as Item;
Repeater rpChild = e.Item.FindControl("rpChild") as Repeater;
rpChild.DataSource = context.SelectChildObjectsByParentId(ParentItem.Id);
rpChild.DataBind();
}
}