6

我有

List<string> selectedOptions;
Dictionary<string,string> masterList;

masterList由 Keys 组成,它们是selectedoptions. 现在,我想提取selectedOptions和之间相交键的所有值masterList

如何构建 LINQ 查询?

4

1 回答 1

12
IEnumerable<KeyValuePair<string,string>> results = 
    dic.Join(keys, d => d.Key, x => x, (a, b) => a);

或者当然

var results2 = keys.Select(k => new {key = k, value = dic[k]});

但如果密钥不存在,这将爆炸。

Where(k => dic.ContainsKey(k))你可以用一个子句来解决这个问题:

var results3 = keys
     .Where(k => dic.ContainsKey(k))
     .Select(k => new {key = k, value = dic[k]});

在搜索了 Linq 源码之后,我认为最后一种方法可能是最有效的。执行连接会强制 linqLookup在连接中涉及的一个集合上创建一个(实际上是多条目哈希表)。鉴于我们已经有一个 Dictionary 提供与 a 相同的查找性能Lookup,因此构建 aLookup是多余的。

于 2012-08-24T17:46:42.213 回答