LINQ查询列表中的字典

我有

List selectedOptions; Dictionary masterList; 

masterList由Keys组成,Keys是selectedoptions值的超集。 现在,我想提取selectedOptionsmasterList之间相交键的所有值。

如何构建LINQ查询?

 IEnumerable> 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源之后,我认为最后一种方法可能效率最高。 执行连接会强制linq在连接中涉及的其中一个集合上进行Lookup (实际上是多条目哈希表)。 看到我们已经有一个提供与Lookup相同的查找性能的Dictionary,构建Lookup是多余的。