【问题标题】:How to query a dictionary of dictionaries with Linq?如何使用 Linq 查询字典?
【发布时间】:2015-03-06 16:52:10
【问题描述】:
public IDictionary<IContextType, IDictionary<string, string>> MasterScopeVariablesTable
                       = new Dictionary<IContextType, IDictionary<string, string>>();

我有一本带键的字典。我想使用 LINQ 从包含名称为“State”的“key”的任何字典中查询 LAST 条目。字典有一些相同的键值不同。

类似于此链接 Query a Dictionary of Dictionaries?

但是这可以在没有 foreach 循环的情况下在单个调用中完成,有人知道怎么做吗?

【问题讨论】:

  • 在这里解释LAST?不保证在IDictionary 订购,请考虑IOrderedDictionary
  • 它们按创建时的顺序排列。我对此持肯定态度,因为我正在使用 IDispose 方法从主服务器中删除最后一个键字典。
  • 再想一想stackoverflow.com/questions/4007782/…,这些元素在您的测试中可能是按照这个顺序排列的。您想编写在测试中有效的代码还是一直有效?
  • 这行得通,但我不想使用 [ContextType] 作为索引,只想要任何一个键名为“State”的字典
  • @CraigTrombly 无序集合的最后一项实际上是从该集合中获取随机项。你不知道你会真正得到哪个项目。如果您想随机获得一件物品,而不是特定物品,请继续。如果您拥有的项目在逻辑上是有序的,并且该顺序很重要,那么不要使用无序集合。

标签: c# linq dictionary


【解决方案1】:
var res = (from ctx in MasterScopeVariablesTable from ctxDict in ctx.Value where ctxDict.Key == key select ctxDict.Value).Last();

对于想看的人来说,这是正确的答案。主要是因为我在其他任何地方都找不到这个确切问题的单一答案。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-31
    • 2012-12-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多