c#:具有多个条件的词典的Linq

时间:2019-02-28 09:50:29

标签: c# linq dictionary

所以我有List的{​​{1}} 而且我想用2列名称的条件来解析1个项目:

如果我搜索列名为“ Id”的1个项目,我会这样做:

Dictionary<string, object>

在这里,我正在搜索列名称为var collection .... var result = collection.OfType<Dictionary<string, object>>() .SelectMany(d => d.Where(x => x.Key == "id")) .Where(x => x.Value?.ToString() == "1234") .ToList(); 且其值为Id的项目,并且工作正常。

现在我想添加一些条件:

我要搜索列名称为1234,值为Id,列名称为1234的项目,我想获取"Class"列名称的值。

有什么建议吗?

1 个答案:

答案 0 :(得分:7)

从根本上讲,您的SelectMany将使 all 词典中的所有条目变平。这意味着,当您获得键/值对时,您不知道哪个对来自哪个字典。在您描述的情况下,您不想这样做。您要过滤到特定项目,然后选择每个项目的一个方面。

您可以只使用下面的代码。我假设collection的类型为List<Dictionary<string, object>>,所以您现在不需要OfType呼叫。

var result = collection
    // Filter to items with the correct ID.
    .Where(d => d.TryGetValue("Id", out var id) && id?.ToString() == "1234")
    // Filter to items containing a "Class" entry
    .Where(d => d.ContainsKey("Class"))
    // Select the class
    .Select(d => d["Class"])
    .ToList();