Linq to sql 用Linq Union合并三个字典

Linq to sql 用Linq Union合并三个字典,linq-to-sql,dictionary,union,Linq To Sql,Dictionary,Union,我需要合并三个字典集合,若键相同,我想增加值 Result is like One - 5+5 =10 two - 10+20=30 three - 7 four - 2 five - 8 six - 2 Dictionary<string, int> d1 = new Dictionary<string, int>(); d1.Add("one", 5); d1.Add(

我需要合并三个字典集合,若键相同,我想增加值

Result is like 
One  - 5+5 =10  
two  - 10+20=30
three - 7
four  - 2
five  - 8
six   - 2


             Dictionary<string, int> d1 = new Dictionary<string, int>();
             d1.Add("one", 5);
             d1.Add("two", 10);
             d1.Add("three", 7);

             Dictionary<string, int> d2 = new Dictionary<string, int>();
             d2.Add("four", 2);
             d2.Add("two", 20);
             d2.Add("five", 8);

             Dictionary<string, int> d3 = new Dictionary<string, int>();
             d3.Add("one", 5);
             d3.Add("six", 2);
结果如下
一-5+5=10
二-10+20=30
3-7
4-2
5-8
6-2
字典d1=新字典();
d1.添加(“一”,5);
d1.添加(“两”,10);
d1.添加(“三”,7);
字典d2=新字典();
d2.添加(“四”,2);
d2.添加(“两”,20);
d2.添加(“五”,8);
字典d3=新字典();
d3.加上(“一”,5);
d3.添加(“六”,2);
联合:忽略匹配的结果集


var uQuery=(从d1中的a选择a.Union(从d2中的b选择b.GroupBy)(grp=>grp.Key)

您应该使用Concat而不是Union。Union将把键值对[“一”,5]视为在d1和d3中重复,因此排除它的一个实例,给出以下结果:

  • “一”,5
  • “两个”,30
  • “三”,7
  • “四”,2
  • “五”,8
  • “六”,2

或者更容易理解:

var union = d1.Concat(d2.Concat(d3));
var groupBy = union.GroupBy(keyValuePair => keyValuePair.Key);
var result = groupBy.ToDictionary(group => group.Key, grp => grp.Sum(kvp => kvp.Value));

你应该使用Concat而不是Union。Union将把键值对[“一”,5]视为在d1和d3中重复,因此排除它的一个实例,给出以下结果:

  • “一”,5
  • “两个”,30
  • “三”,7
  • “四”,2
  • “五”,8
  • “六”,2

或者更容易理解:

var union = d1.Concat(d2.Concat(d3));
var groupBy = union.GroupBy(keyValuePair => keyValuePair.Key);
var result = groupBy.ToDictionary(group => group.Key, grp => grp.Sum(kvp => kvp.Value));