如何将两个字典与同一个键合并?

时间:2013-06-10 13:52:12

标签: c# linq union

词典1:

Dictionary<string, IList<PuntoMappa>> PuntiCantieriCMS = new Dictionary<string, IList<PuntoMappa>>();

词典2:

Dictionary<string, IList<PuntoMappa>> PuntiCantieri = new Dictionary<string, IList<PuntoMappa>>();

我希望联盟这两者;密钥相同的地方,他们必须为每个密钥联合IList<PuntoMappa>。有可能吗?

尝试:

PuntiCantieri = PuntiCantieri .Union(PuntiCantieriCMS ).ToDictionary(kvp => kvp.Key, kvp => kvp.Value);

但是当2个键相似时,它会触发异常。

2 个答案:

答案 0 :(得分:4)

这应该有效:

Dictionary<string, List<PuntoMappa>> unioned = PuntiCantieriCMS
        .Concat(PuntiCantieri)
        .GroupBy(kv => kv.Key)
        .ToDictionary(kv => kv.Key, kv => kv.SelectMany(g => g.Value).ToList());

请注意,我已将值从IList<T>更改为List<T>

答案 1 :(得分:1)

 foreach(var kvp in PuntiCantieri)
 {
      if(PuntiCantieriCMS.ContainsKey(kvp.Key))
      {
         kvp.Value.AddRange(PuntiCantieriCMS[kvp.Key]);
      }

 }