加入两本词典

时间:2013-08-28 14:09:08

标签: c# linq

您好我有两个字典,我需要找到一种方法将它们连接在一起。这是两种字典类型。

IDictionary<string, byte[]> dictionary1
IDictionary<IFileShareDocument, string> dictionary2

在这两个词典中,我必须创建一个看起来像这样的第三个词典

IDictionary<IFileShareDocument, byte[]> dictionary3

两个字典都具有完全相同的项目数,并且它们的字符串属性是链接点。

我想要的是能够写出像这样的东西:

dictionary1.value join with dictionary2.key
where dictionary1.key == dictionary2.value

This statement should result in dictionary3.

有什么方法可以实现这一点我似乎无法找到办法吗?

3 个答案:

答案 0 :(得分:5)

var dictionary3 =
    dictionary1
        .Join(dictionary2, x => x.Key, x => x.Value, (x, y) => new { x, y })
        .ToDictionary(a => a.y.Key, a => a.x.Value);

答案 1 :(得分:2)

这是一种使用LINQ查询语法的方法,使用join(这与@KingKing的解决方案大致相同):

IDictionary<IFileShareDocument, byte[]> dictionary3 =
    (from item1 in dictionary1
     join item2 in dictionary2 on item1.Key equals item2.Value
     select new { item2.Key, item1.Value })
         .ToDictionary(x => x.Key, x => x.Value);

请注意,使用fromwhere时,上述内容非常适合此示例,因为它更有效。我在这里包括这个因为如果你像我一样(更熟悉SQL,它会将这样的东西自动转换为连接),这种糟糕的方式可能是第一个浮现在脑海中的方式:

IDictionary<IFileShareDocument, byte[]> dictionary3 =
    (from item1 in dictionary1
     from item2 in dictionary2
     where item1.Key == item2.Value
     select new { item2.Key, item1.Value })
         .ToDictionary(x => x.Key, x => x.Value);

答案 2 :(得分:2)

这对你有用吗?

var result =
    dictionary2
        .ToDictionary(x => x.Key, x => dictionary1[x.Value]);