c# Сортировка вложенных списков, как?

Есть вложенный список

public Dictionary<dynamic, Dictionary<string, dynamic>> Data = new();

В него динамически добавляются данные такого рода:

Data .Add(ID, new Dictionary<string, dynamic> {
  { "Addr", Addr },
  { "Pos", Pos  },
  { "Description", Description },
  { "Number", Number  }
});

На выходе получаем примерный список:

Data["adx01"][{"Addr":5},{"Pos":100},{"Description":"Описание1"},{"Number":44}];
Data["vdx11"][{"Addr":2},{"Pos":45},{"Description":"Описание2"},{"Number":12}];
Data["ydx50"][{"Addr":3},{"Pos":67},{"Description":"Описание3"},{"Number":71}];
Data["zdx31"][{"Addr":10},{"Pos":9},{"Description":"Описание4"},{"Number":33}];

Мне нужно отсортировать его по полю "Number", чтобы было вот так:

Data["ydx50"][{"Addr":3},{"Pos":67},{"Description":"Описание3"},{"Number":71}];
Data["adx01"][{"Addr":5},{"Pos":100},{"Description":"Описание1"},{"Number":44}];
Data["zdx31"][{"Addr":10},{"Pos":9},{"Description":"Описание4"},{"Number":33}];
Data["vdx11"][{"Addr":2},{"Pos":45},{"Description":"Описание2"},{"Number":12}];

Каким методом это можно сделать?

Ответ: aepot: Data=Data.OrderBy(pair => (int)pair.Value["Number"]).ToDictionary(pair => pair.Key, pair => pair.Value)


Ответы (1 шт):

Автор решения: aepot

Берете модель данных

public class Item
{
    public long Addr { get; set; }
    public long Pos { get; set; }
    public string Description { get; set; }
    public long Number { get; set; }
}
var items = new Dictionary<string, Item>();

items.Add(id, new Item
{
    Addr = Addr,
    Pos = Pos,
    Description = Description,
    Number = Number
});

тогда отсортировать это можно так

var ordered = items.OrderBy(pair => pair.Value.Number);

Сам по себе словарь не может считаться упорядоченной структурой данных, поэтому запихивать перечислитель ordered типа IEnumerable<KeyValuePair<string, Item>> обратно в словарь нет никакого смысла. И используйте для словаря строго типизированные ключи сравниваемого типа.

→ Ссылка