使用Linq从列表字典创建映射

使用Linq从列表字典创建映射,linq,linq-to-objects,Linq,Linq To Objects,给定 这可以用Linq完成吗 关于将相同的数据结构展平,也有一个非常类似的问题 但是,这并不维护与字典键的关系 我复习了a(相关问题中使用的方法),但看不到与关键相关的方法。听起来像是你想要的: Dictionary<string, string> map = new Dictionary<string,string>(); foreach (KeyValuePair<string, List<string>> kvp in myDict) {

给定

这可以用Linq完成吗

关于将相同的数据结构展平,也有一个非常类似的问题

但是,这并不维护与字典键的关系

我复习了a(相关问题中使用的方法),但看不到与关键相关的方法。

听起来像是你想要的:

Dictionary<string, string> map = new Dictionary<string,string>();
foreach (KeyValuePair<string, List<string>> kvp in myDict)
{
    foreach (string name in kvp.Value)
    {
        map.Add(name, kvp.Key);
    }
}

请注意,
SelectMany
的第二个参数在这里看起来有点奇怪,因为原始键成为最终字典中的值,反之亦然。

@EricJ.:它应该仍然有效,但编辑的版本应该更清晰一些。
Dictionary<string, string> map = new Dictionary<string,string>();
foreach (KeyValuePair<string, List<string>> kvp in myDict)
{
    foreach (string name in kvp.Value)
    {
        map.Add(name, kvp.Key);
    }
}
var query = myDict.SelectMany(pair => pair.Value,
                              (pair, v) => new { Key = v, Value = pair.Key })
                  .ToDictionary(pair => pair.Key, pair => pair.Value);