字典的嵌套LINQ
本文关键字:LINQ 嵌套 字典 | 更新日期: 2023-09-27 18:07:18
使用c#,我有以下Dictionary
Dictionary<MyClass, List<MyOtherClass>> myDictionary;
我正试图写一个LINQ查询,将选择Dictionary
的每个键值内的MyOtherClass
的每个实例。到目前为止,我有以下内容:
var whatImLookingFor = myDictionary.SelectMany(x => x.Value).Select(y => y.myProperty == someCompareValue);
编译并运行,但是whatImLookingFor
似乎不能被强制转换为MyOtherClass
对象的集合。如果我尝试,它说我正在尝试从bool
转换到MyOtherClass
。
在处理Dictionaries
时,是否有特殊的方法来处理嵌套的LINQ
查询?
实际上是从每个条目中选择一个bool表达式。我想你的意思是Where
代替Select
,像这样:
var whatImLookingFor = myDictionary.SelectMany(x => x.Value)
.Where(y => y.myProperty == someCompareValue);
正如其他人提到的,这样做是在选择一个bool列表;您将根据字典枚举键值对的顺序,有效地选择列表中每个值测试的结果。
可以用where代替第二次选择。它有点冗长,但是当查询变得更复杂时,我倾向于发现这种形式的linq更易于维护:
var whatImLookingFor = from kvp in myDictionary
from v in kvp.Value
where v.myProperty == someCompareValue
select v;
您想要使用Where
而不是Select
,甚至不需要SelectMany
-您可以将其写为:
var whatImLookingFor = myDictionary.Values.Where(y => y.myProperty == someCompareValue);
希望有帮助!