我有2个词典,第一个词的键在第二个词中匹配多个重复值:
var firstDic = new Dictionary<string, string>();
firstDic.Add("123", "Value1");
firstDic.Add("456", "Value2");
firstDic.Add("789", "Value3");
firstDic.Add("000", "Value4");
var secondDic = new Dictionary<string, string>();
secondDic.Add("5d866ac0-abab-46c9-a951-e7b0cf25dc72", "123");
secondDic.Add("217ddba3-977f-45b8-a7f6-80c6fbcef16e", "123");
secondDic.Add("99867f65-22c1-4b6c-b1bb-3fa73af317a9", "456");
secondDic.Add("203f9cf7-98f8-40fc-a4ba-da3a62c7d795", "456");
secondDic.Add("9bdafb4c-4d5a-4c87-8b9d-d9b98473390a", "789");
secondDic.Add("d3a245f0-cc5b-4c08-aaff-475d64e27e8d", "000");
我有一个foreach,其中我迭代第一个字典中的每个键
foreach (var item in firstDic)
{
//It`s only taking the first match in the secondDic
var myKey = secondDic.FirstOrDefault(x => x.Value == item.Key);
}
是否可以从第二个字典(secondDic)中提取具有与第一个字典键匹配的值的所有键,并将它们存储在某个数据结构中。
建议Tnx!
答案 0 :(得分:1)
然后您不需要使用FirstOrDefault()
,只需使用将返回集合的Where()
:
var myKeys = secondDic.Where(x => x.Value == item.Key);
然后你可以迭代它:
foreach(var item in myKeys)
{
}
或做任何需要应用的业务逻辑。
答案 1 :(得分:0)
这可能会有所帮助
var result = secondDic.Where(s => firstDic.Any(f => f.Key == s.Value))
.Select(s => s.Key)
.ToList();