Группировать словарь по нескольким свойствам ключа - PullRequest
0 голосов
/ 25 октября 2018

У меня есть следующий код, который группирует список по трем свойствам своих элементов и возвращает список списков:

List<Employee> data;
var groups = data.GroupBy(x => new { x.Company, x.Position, x.Age })
                 .Select(grp => grp.ToList())
                 .ToList();

Невозможно понять, как изменить этот код для работы со словарем:

Dictionary<Employee, Report> data;

Мне нужно создать список словарей, сгруппированных по этим трем свойствам словарного ключа.

1 Ответ

0 голосов
/ 25 октября 2018

У вас есть как минимум 2 варианта:

Сначала: Используйте группирование по ключевым свойствам вашего словаря, а затем проецируйте значения словаря в группы:

    Dictionary<Employee, Report> data;
    var groups = data
                 .GroupBy(x => new { x.Key.Company, x.Key.Position, x.Key.Age }, pair => pair.Value)
                 .Select(grp => grp.ToList())
                 .ToList();

Второе: , как сказал @ZRT, вы можете сначала проецировать только значения словаря и группы:

    Dictionary<Employee, Report> data;
    var groups = data
                 .Select(pair => pair.Key)
                 .GroupBy(x => new { x.Company, x.Position, x.Age }, pair => pair.Value)
                 .Select(grp => grp.ToList())
                 .ToList();

UPD

Однакоесли вам нужно сохранить отношение Сотрудник -> Отчет, вы можете просто сгруппировать по его ключу:

    Dictionary<Employee, Report> data;
    List<List<KeyValuePair<Employee , Report>>> groups = data
                 .GroupBy(x => new { x.Key.Company, x.Key.Position, x.Key.Age })
                 .Select(grp => grp.ToList())
                 .ToList();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...