我有
List<string> selectedOptions;
Dictionary<string,string> masterList;
masterList
由 Keys 组成,它们是selectedoptions
. 现在,我想提取selectedOptions
和之间相交键的所有值masterList
。
如何构建 LINQ 查询?
我有
List<string> selectedOptions;
Dictionary<string,string> masterList;
masterList
由 Keys 组成,它们是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 源码之后,我认为最后一种方法可能是最有效的。执行连接会强制 linqLookup
在连接中涉及的一个集合上创建一个(实际上是多条目哈希表)。鉴于我们已经有一个 Dictionary 提供与 a 相同的查找性能Lookup
,因此构建 aLookup
是多余的。