使用公共密钥加入两个词典
我试图基于共同的查找值将两个字典集合连接在一起。
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]);