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();
    }
}