你如何使用LINQ查询比较两个字典键?下面是我目前正在使用我的程序代码:
foreach (KeyValuePair<string, string> sourceProject in sourceProjects)
{
foreach (KeyValuePair<string, string> targetProject in targetProjects)
{
if (targetProject.Key == sourceProject.Key)
{
// do something
}
}
}
我想,你希望是这样的:
from kv1 in sourceProjects
join kv2 in targetProjects on kv1.Key equals kv2.Key
select /* whatever, e. g. */ kv1.Value + kv2.Value
但实际上,更高效的将是这样:
from key in sourceProjects.Keys.Intersect(targetProjects.Keys)
select /* whatever, e. g. */ sourceProjects[key] + targetProjects[key]
或者可能
from key in sourceProjects.Keys.Intersect(targetProjects.Keys)
let sourceProject = sourceProjects[key]
let targetProject = targetProjects[key]
select /* whatever, e. g. */ sourceProject + targetProject;
IEnumerable<KeyValuePair<string, string>> one;
IEnumerable<KeyValuePair<string, string>> two;
var duplicates = one.Select(o => o.Key).Where(k => two.Select(t => t.Key).Any(kTwo => kTwo == k));
foreach (var duplicateKey in duplicates)
{
// Do whatewer you want with those keys here
}