【问题标题】:LINQ querying a Dictionary against a ListLINQ 根据列表查询字典
【发布时间】:2012-08-24 17:42:23
【问题描述】:

我有

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

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

如何构建 LINQ 查询?

【问题讨论】:

    标签: c# linq list dictionary linq-to-objects


    【解决方案1】:
    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 =&gt; dic.ContainsKey(k)) 子句解决此问题:

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

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

    【讨论】:

    • 这不符合我的目的。我需要字典中的过滤值来匹配键。这仍然返回匹配的键。不确定我在解释代码时是否做错了什么......
    • @GilliVilla - results3 返回一个包含键和值的列表,到底是什么问题?
    猜你喜欢
    • 2016-06-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多