您好我有两个字典,我需要找到一种方法将它们连接在一起。这是两种字典类型。
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.
有什么方法可以实现这一点我似乎无法找到办法吗?
答案 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);
请注意,使用from
和where
时,上述内容非常适合此示例,因为它更有效。我在这里包括这个因为如果你像我一样(更熟悉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]);