创建从pocos数组list <string>的字典?

时间:2018-11-21 22:13:12

标签: c# linq dictionary

要创建一个dictionary<string, list<string>>

来自具有以下列表的结果集中:

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

我希望键为CategoryName,值应为名称列表。

每个类别可以具有与其关联的相同名称。一个类别名称到许多报告名称,看起来像这样。

{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 :(得分:2)

这是另一个更紧凑的解决方案。

Dictionary<string, List<string>> dictionary = catalogs
            .GroupBy(catalog => catalog.CategoryName, catalog => catalog.Name)
            .ToDictionary(grouping => grouping.Key, grouping => grouping.ToList());

答案 1 :(得分:2)

您需要使用分组:

var dict = items.GroupBy(c => c.CategoryName).ToDictionary(g => g.Key, g => g.Select(c => c.Name));