Было бы намного лучше изменить логику на один SQL-запрос, который возвращает все ваши пункты меню за один раз, а затем выполнить итерацию этого набора данных для построения вашего меню.
Вы можете просто попробовать
SELECT id, DepartmentID, GroupingID, Heading, OrderID,
Publish, moduleid, url, urltarget
FROM Grouping
WHERE (DepartmentID = 0 AND Publish <> 0)
ORDER BY OrderID
Возвращает все данные, которые возвращают вышеупомянутые запросы, включая GroupingID, который определяет древовидную структуру. Вы должны быть в состоянии загрузить результаты в коллекцию объектов и затем запросить их, используя LINQ для построения вашего меню.
Скопируйте ваши данные в следующий класс и затем используйте LINQ в их списке:
public class DataClass
{
public string Id { get; set; }
public string DepartmentID { get; set; }
public string GroupingID { get; set; }
public string Heading { get; set; }
public string OrderID { get; set; }
public string Publish { get; set; }
public string Moduleid { get; set; }
public string Url { get; set; }
public string Urltarget { get; set; }
public List<DataClass> Children { get; set; }
public DataClass(string id, string departmentID, string groupingID, string heading, string orderID, string publish, string moduleid, string url, string urltarget)
{
Id = id;
DepartmentID = departmentID;
GroupingID = groupingID;
Heading = heading;
OrderID = orderID;
Publish = publish;
Moduleid = moduleid;
Url = url;
Urltarget = urltarget;
}
}