0

如何使用 linq 查询比较两个字典键?下面是我目前在我的程序中使用的代码:

foreach (KeyValuePair<string, string> sourceProject in sourceProjects)
{
    foreach (KeyValuePair<string, string> targetProject in targetProjects)
    {
        if (targetProject.Key == sourceProject.Key)
        {
            // do something
        }
    }
}
4

2 回答 2

3

我假设你想要这样的东西:

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;
于 2019-02-11T10:44:20.590 回答
0
    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
    }
于 2019-02-11T11:14:28.667 回答