使用公共密钥加入两个词典

我试图基于共同的查找值将两个字典集合连接在一起。

var idList = new Dictionary(); idList.Add(1, 1); idList.Add(3, 3); idList.Add(5, 5); var lookupList = new Dictionary(); lookupList.Add(1, 1000); lookupList.Add(2, 1001); lookupList.Add(3, 1002); lookupList.Add(4, 1003); lookupList.Add(5, 1004); lookupList.Add(6, 1005); lookupList.Add(7, 1006); // Something like this: var q = from id in idList.Keys join entry in lookupList on entry.Key equals id select entry.Value; 

上面的Linq语句只是一个例子,不能编译。 对于idList中的每个条目,根据匹配的Keys从lookupList中提取值。

结果应该是来自lookupList(1000,1002,1004)的值列表。

使用Linq最简单的方法是什么?

 from id in idList.Keys where lookupList.ContainsKey(id) let value1 = idList[id] let value2 = lookupList[id] select new {id, value1, value2} 

或者,更经典

 from kvp1 in idList join kvp2 in lookupList on kvp1.Key equals kvp2.Key select new {key = kvp1.Key, value1 = kvp1.Value, value2 = kvp2.Value} 

您的查询中的错误是范围界定:

 from a in theAs join b in theBs on (leftside) equals (rightside) 

a在左侧区域范围内。 b在右侧区域范围内。

如果我误解了您的问题,我很抱歉,但您是否只想从列表B中检索值,其中列表A具有相同键的KeyValuePair?

 from lookup in lookupList where idList.Keys.Contains(lookup.Key) select lookup.Value; 
  var q = from id in idList join entry in lookupList on id.Key equals entry.Key select entry.Value; 

您所需的linq语句看起来就像那样,需要在条件下切换ID和条目。

你觉得这怎么样 ?

 var values = idList.Keys.Select(i => lookupList[i]);