Группировать элементы списка по родительскому идентификатору, затем упорядочивать по другому полю - PullRequest
0 голосов
/ 05 мая 2018

Итак, у меня есть список таких элементов:

public class Schedule
{
   public string Id {get;set;}
   public int Prompt {get; set;}
   public int Hierarchy {get;set;}
   public string? ParentId {get;set;
   public virtual ICollection<Schedule> Children {get;set;}
}

Любой элемент может иметь n дочерних элементов, а их дочерних элементов больше дочерних, я пытаюсь отобразить данные в виде дерева, но я также хочу упорядочить по полю Prompt; это поле является инкрементным индексом, поэтому все родители не имеют одно и то же значение, но когда вы переходите к своим дочерним элементам, этот индекс возвращается к значению = 1 и так далее.

Поле Иерархия должно знать, насколько глубоко ребенок в дереве

1 Ответ

0 голосов
/ 05 мая 2018

Одним из решений является использование рекурсивной функции, которая пересекает дерево и сортирует все дочерние элементы.

private IEnumerable<Schedule> Sort(IEnumerable<Schedule> schedules)
{
    var sorted = schedules.OrderBy(s => s.Prompt);

    foreach (var schedule in sorted.Where(s => s.Children != null && s.Children.Any()))
    {
        schedule.Children = Sort(schedule.Children).ToList();
    }

    return sorted;
}

Который вы можете назвать в исходном списке:

var schedules = new List<Schedule>(); // get schedules from somewhere
var sorted = Sort(schedules);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...