Не думаю, что у вас должно быть объединение в вашем LINQ; Ваша таблица должна быть прочитана только один раз, и, имея все записи, вы должны знать, как их вложить друг в друга с помощью рекурсивного ключа ParentID, в основном каждая запись имеет Id, метку и знает, к какой другой родительской записи она принадлежит, нет причин присоединяться .
в старом программировании форм Windows, я, вероятно, написал бы небольшую процедуру для сканирования всех записей и соответственно создания узлов. Есть также некоторые иерархические свойства TreeView в целом, так что вы можете указать поле родительского узла или что-то подобное, и TreeView создаст иерархию для вас, но на самом деле я не уверен в этом с формами окон по умолчанию TreeView, я использовал так многие элементы управления, которые не могут вспомнить, какие из них имеют какие функции без проверки ... (DevExpress, Telerik, Infragistics ...).