字典的嵌套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查询?

字典的嵌套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);

希望有帮助!