如何将LINQ查询分组到dictionary

本文关键字:string dictionary LINQ 查询 | 更新日期: 2023-09-27 18:01:47

我有一个简单的模型,我想分组:

public class PracticeArea
{
    [Key]
    public int PracticeAreaID { get; set; }
    public string Name { get; set; }
    public string Type { get; set; }
}

我想按类型分组,我该如何转换它:

var practiceAreas = (from c in db.PracticeAreas
                             select c).

:

public Dictionary<string, string> groupedPracticeAreas { get; set; }

我不确定如何在Linq内分组工作-我可以运行。togroup(),。但那并没有给我我的字典。

我试过:

practiceAreas = practiceAreas.ToDictionary(x => x.Type, x => x.Name);

但是这给了我一个强制转换错误

如何将LINQ查询分组到dictionary<string, string>

如果类型和名称都是字符串,则不应该抛出cast异常:

practiceAreas.ToDictionary(x => x.Type, x => x.Name)

但是,如果某个类型存在多个实践区域,则会抛出。您可以使用以下选项之一:

1)使用查找而不是字典。它将根据区域类型

创建名称查找
practiceAreas.ToLookup(pa => pa.Type, pa => pa.Name)

2)使用集合字典保存每种类型的所有名称,例如Dictionary<string, List<string>>:

practiceAreas.GroupBy(pa => pa.Type)
             .ToDictionary(g => g.Key, g => g.Select(pa => pa.Name).ToList())

3)将所有名字合并成一个字符串

practiceAreas.GroupBy(pa => pa.Type)
         .ToDictionary(g => g.Key, g => String.Join("," g.Select(pa => pa.Name)))