LINQ查询列表中的字典

Gil*_*lla 6 c# linq linq-to-objects dictionary list

我有

List<string> selectedOptions;
Dictionary<string,string> masterList;
Run Code Online (Sandbox Code Playgroud)

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

如何构建LINQ查询?

spe*_*der 12

IEnumerable<KeyValuePair<string,string>> results = 
    dic.Join(keys, d => d.Key, x => x, (a, b) => a);
Run Code Online (Sandbox Code Playgroud)

当然

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

但如果钥匙不存在,这将爆炸.

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

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

在拖网Linq源之后,我认为最后一种方法可能效率最高.执行连接会强制linq Lookup在连接中涉及的一个集合上创建(实际上是多条目哈希表).因为我们已经有了一个提供与a相同的查找性能的Dictionary Lookup,所以构建一个Lookup是多余的.