Если вы хотите сгруппировать их по родительскому идентификатору, то
var dictionary = _db.Items
.GroupBy(x => x.parent_id)
.ToDictionary(x => x.Key, y => y.ToList());
поместит все элементы в Dictionary<int, List<dbItemTypeName>>
, где ключом является parentID, а список содержит все элементы с этим parentID.
Если вы хотите добавить все элементы в комбинированный список одновременно, словарь - не лучший вариант, так как он не гарантирует, что он будет поддерживать порядок. Вы хотите использовать SortedDictionary.
var dictionary = _db.Items
.OrderBy(x => x.parent_id == 0 ? x.id : x.parent_id)
.ThenBy(x => x.parent_id)
.ToDictionary(x => x.id, y => y);
var sortedDictionary = new SortedDictionary<int,DBItemType>(dictionary);
, где DBItemType
- это тип элементов, содержащихся в _db
. Если вам интересно, что здесь происходит - мы сначала упорядочиваем по результату x.parent_id == 0 ? x.id : x.parent_id
, потому что он сгруппирует родительские элементы с потомками (мы используем обычный id
, если parent_id
равен 0), затем упорядочиваем по parent_id
чтобы получить родительский элемент наверх (это parent_id
равно 0).
Если вы хотите выбрать строковое представление элементов вместо самих элементов:
var dictionary = _db.Items
.OrderBy(x => x.parent_id == 0 ? x.id : x.parent_id)
.ThenBy(x => x.parent_id)
.ToDictionary(x => x.id, y => y.parent_id == 0 ? y.item : $" -{y.item}");
var sortedDictionary = new SortedDictionary<int,string>(dictionary);
Затем обязательно установите для свойства DisplayMember
ComboBox
значение "Value"
и свойство ValueMember
до "Key"