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

时间:2010-06-16 21:06:19

标签: c# linq

我正在尝试根据常见的查找值将两个词典集合连接在一起。

var idList = new Dictionary<int, int>();
idList.Add(1, 1);
idList.Add(3, 3);
idList.Add(5, 5);

var lookupList = new Dictionary<int, int>();
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中的每个条目,根据匹配的密钥从lookupList中提取值。

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

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

4 个答案:

答案 0 :(得分:15)

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在leftside区域范围内。 b在右侧区域范围内。

答案 1 :(得分:1)

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

from lookup in lookupList
where idList.Keys.Contains(lookup.Key)
select lookup.Value;

答案 2 :(得分:0)

        var q = from id in idList
                join entry in lookupList
                  on id.Key equals entry.Key
                select entry.Value;

您想要的linq语句看起来像是这样,ID和条目需要在条件下切换。

答案 3 :(得分:0)

你怎么看待这个?

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