создать словарь списка <string>из массива pocos? - PullRequest
0 голосов
/ 22 ноября 2018

Хотите создать dictionary<string, list<string>>

из набора результатов, который имеет список:

class catalog{
public string Name { get; set; }
public string CategoryName { get; set; }
public  bool CategoryDeleted { get; set; }
}

Я хочу, чтобы ключ был CategoryName, а значение было бы Listимен.

С каждой категорией может быть связано одно и то же имя.Одно имя категории для многих имен отчетов, и оно выглядит следующим образом.

{Name = "rp1", CategoryName=cat1, CategoryDeleted = 0 }
{Name = "rp2", CategoryName=cat1, CategoryDeleted = 0 }
{Name = "rp3", CategoryName=cat1, CategoryDeleted = 0 }
{Name = "rp1", CategoryName=cat2, CategoryDeleted = 0 }
{Name = "rp2", CategoryName=cat2, CategoryDeleted = 0 }

Я бы хотел чистый запрос linq, который делает это кратко.

то, что у меня есть до сих пор:

var dic = new Dictionary<string, List<string>>();
catalog.Select(x => x.CategoryName).Distinct().ToList().ForEach(x =>
{
     dic.Add(x, catalog.Where(t => t.CategoryName == x).Select(t => t.ReportName).ToList());
});

Я хочу знать, могу ли я улучшить свой запрос, чтобы не приходилось ссылаться на список каталога дважды.один раз для итерации и выбора моих ключей, затем другой для инициализации значения при добавлении словаря.

спасибо!

Ответы [ 2 ]

0 голосов
/ 22 ноября 2018

Вам нужно использовать группировку:

var dict = items.GroupBy(c => c.CategoryName).ToDictionary(g => g.Key, g => g.Select(c => c.Name));
0 голосов
/ 22 ноября 2018

Вот еще одно компактное решение.

Dictionary<string, List<string>> dictionary = catalogs
            .GroupBy(catalog => catalog.CategoryName, catalog => catalog.Name)
            .ToDictionary(grouping => grouping.Key, grouping => grouping.ToList());
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...