Я установил свои модели так:
У меня есть CategoryTable, который имеет CategoryParentId. Если одна строка имеет CategoryParentId = 0, это первая категория.
вот моя функция
private void GetSubTree(IList<Page> allCats, Page parent, List<CategoryItemModel> items)
{
var subCats = allCats.Where(c => c.CategoryParentID == parent.ID);
foreach (var cat in subCats)
{
//add this category
items.Add(new CategoryItemModel { ID = cat.Id, Title = parent.Title + " >> " + cat.Title });
//recursive call in case your have a hierarchy more than 1 level deep
GetSubTree(allCats, cat, items);
}
}