Группировка категорий и подкатегорий

Рейтинг: 0Ответов: 1Опубликовано: 06.07.2023

Прежде всего, существует следующая таблица:

id CategoryName ParentId HierarchyCode
1 Электроника null 1
2 Клавиатура 1 1-2
3 Механическая 2 1-2-3
4 Мембранная 2 1-2-4
5 Монитор 1 1-5
6 Мебель null 6
7 Стул 6 6-7

Необходимо выполнить группировку категорий по самой старшей и загрузить в список (List) для последующего использования, то есть, вывод должен быть следующим:

  1. Электроника
    1.1. Клавиатура
    1.1.1. Механическая
    1.1.2. Мембранная
    1.2. Монитор
  2. Мебель
    2.1. Стул

Используется EntityFramework, postgresql

Ответы

▲ 1Принят

Предположим, что это ваш класс Entity:

class Entity
{
    public Entity(int id, string name, int? parentId)
    {
        Id = id;
        Name = name;
        ParentId = parentId;

        Child = new List<Entity>();
    }

    public int Id { get; set; }
    public string Name { get; set; }
    public int? ParentId { get; set; }

    public List<Entity> Child { get; set; }
}

Это тестовые данные:

var data = new[]
{
    new Entity(1, "Электроника", null),
    new Entity(2, "Клавиатура", 1),
    new Entity(3, "Механическая", 2),
    new Entity(4, "Мембранная", 2),
    new Entity(5, "Монитор", 1),
    new Entity(6, "Мебель", null),
    new Entity(7, "Стул", 6)
};

Тогда можно будет сделать группировку так:

var dictionary = data.ToDictionary(x => x.Id);
foreach (var item in dictionary.Values)
{
    if (item.ParentId.HasValue)
    {
        var parent = dictionary[item.ParentId.Value];
        parent.Child.Add(item);
    }
}
var rootEntities = dictionary.Values.Where(x => x.ParentId == null).ToList();

В rootEntities будет 2 родительских объекта.
Только не понял, для чего тут тег razor?