MadMyche
Лучший способ сделать это-использовать отношения родитель-потомок в категориях, S/O имеет действительное решение:
c# - ASP.Net MVC: Как показать вложенное отношение родитель-потомок с помощью рекурсивной техники[^]
По моему опыту, если у вас есть много категорий и проблем с производительностью опыта глубины; вы можете кэшировать/сохранять сгенерированную иерархию.
Добавлено: перемещение структуры в базу данных
Ниже приводится очень простая таблица БД для хранения этой информации. Вы, вероятно, захотите добавить описательную информацию для них. Некоторые люди также скажут вам добавить внешний ключ к родительскому идентификатору с ограничениями... Как правило, это не способствует повышению производительности самой БД, но если вы используете ORM, например Entity Framework, это может помочь вашему приложению лучше понять структуру вашей базы данных.
CREATE TABLE Categories (
CategoryID INT IDENTITY(1,1) NOT NULL PRIMARY KEY,
ParentID INT NULL,
CategoryName NVARCHAR(100) NULL,
-- other fields as needed
)
GO
SET IDENTITY_INSERT Categories ON
INSERT Categories (CategoryID, ParentID, CategoryName)
VALUES (0, NULL, Root)
, (1, 0, 'Computer')
, (2, 0, 'Electronic')
, (3, 1, 'Lenovo')
, (4, 3, 'P250')
, (5, 2, 'Lise')
SET IDENTITY_INSERT Categories OFF
GO
Я не собираюсь вдаваться в эту сторону C#, так как большинство пользователей сегодня действительно используют какой-то ORM, в то время как я являюсь прямым АДО-человеком.
Что я могу вам сказать, так это то, что у вас будет класс Category, который отражает эту структуру БД, и вам понадобится какой-то список/коллекция для работы со всеми категориями.
Для поиска помощи по различным пунктам я бы предложил иметь
Категории Родителей Ребенка в запросе
MadMyche
Я бы посоветовал вам прочитать статью о переполнении стека и провести собственное исследование; это всего лишь базовый пример для начала работы.
Мне очень жаль, но код, который я использую, не может быть общим, он является собственностью.