Сортировка многоуровневых данных с помощью Linq - PullRequest
0 голосов
/ 29 апреля 2019

У меня есть структура данных следующим образом:

public class BranchLevel_1
{
    public string Name { get; set; }
    public ObservableCollection<BranchLevel_2> Children { get; set; }

    public BranchLevel_1(string name, List<BranchLevel_2> children)
    {
        this.Name = name;
        this.Children = new ObservableCollection<BranchLevel_2>(children);
    }
}

public class BranchLevel_2
{
    public ObservableCollection<BranchLevel_3> Contents { get; set; }

    public BranchLevel_2(List<string> contents)
    {
        this.Contents = new ObservableCollection<BranchLevel_3>();
        for (int i = 0; i < contents.Count; i++)
        {
            this.Contents.Add(new BranchLevel_3(contents[i]));
        }
    }
}

public class BranchLevel_3
{
    public string Content { get; set; }

    public BranchLevel_3(string text)
    {
        this.Content = text;
    }
}

Сортировка данных на первом уровне проста, и я могу легко получить по:

Level1_Data.OrderBy(item => item.Name).ToList()

Однако, я застрялс сортировкой на втором уровне.Класс BranchLevel_2 - это просто контейнер для элементов, хранящихся в классах BranchLevel_3.Поэтому я хотел бы отсортировать Level2 с данными, хранящимися в BranchLevel_2.Contents 1 .Content value.Этот синтаксис для меня кажется правильным, и я не могу найти проблему ...

  Level1_Data.Select(item_Level1 => item_Level1.Children.OrderBy(item_Level2 => item_Level2.Contents[1].Content)).ToList();  

Любые подсказки?

Вот результат (обозначенный желтым цветом должен быть отсортирован в алфавитном порядке)enter image description here

Ответы [ 2 ]

0 голосов
/ 29 апреля 2019

Вот решение, которое решило проблему, благодаря предложению @ bhmahler

public class BranchLevel_1
{
    public string Name { get; set; }
    public ObservableCollection<BranchLevel_2> Children { get; set; }

    public BranchLevel_1(string name, List<BranchLevel_2> children)
    {
        this.Name = name;
        //this line needs to be added before creating ObservableCollection
        children.OrderBy(item_level2 => item_level2.Contents[1].Content).ToList();
        this.Children = new ObservableCollection<BranchLevel_2>(children);
    }
}
0 голосов
/ 29 апреля 2019

Почему бы просто не отсортировать содержимое перед добавлением их в ObservableCollection

public class BranchLevel_2
{
    public ObservableCollection<BranchLevel_3> Contents { get; set; }

    public BranchLevel_2(List<string> contents)
    {
        this.Contents = new ObservableCollection<BranchLevel_3>();
        foreach (var content in contents.OrderBy(c => c))
        {
            this.Contents.Add(new BranchLevel_3(content));
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...