所以我有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"
列名称的值。
有什么建议吗?
答案 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();