我有
List<string> selectedOptions;
Dictionary<string,string> masterList;
masterList
包含键,这些键是selectedoptions
值的超集。
现在,我想提取selectedOptions
和masterList
之间交集的所有值。
如何构建LINQ查询?
我有
List<string> selectedOptions;
Dictionary<string,string> masterList;
masterList
包含键,这些键是selectedoptions
值的超集。
现在,我想提取selectedOptions
和masterList
之间交集的所有值。
如何构建LINQ查询?
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源码后,我认为最后一种方法可能是最有效的。通过使用联接操作将Linq转换为Lookup
(实际上是一个多条目哈希表),其中一个集合被涉及到。鉴于我们已经有了一个与Lookup
相同查找性能的字典,构建Lookup
是不必要的。