C# 选择列表的内部对象

C# 选择列表的内部对象,c#,linq,C#,Linq,我的项目对象中有以下层次结构 计划 发射 阶段 位置 我将其包含如下内容: - Project has List<Launch> - Launch has List<Phase> - Phase has List<Position> 可以使用将结果序列展平为一个序列的 project .Launches .SelectMany(x => x.Phases) .Where(x => x.Posit

我的项目对象中有以下层次结构

  • 计划
    • 发射
      • 阶段
        • 位置
我将其包含如下内容:

 - Project has List<Launch>
 - Launch has List<Phase>
 - Phase has List<Position>
可以使用将结果序列展平为一个序列的

project
    .Launches
    .SelectMany(x => x.Phases)
    .Where(x => x.Positions.Any(p => p.Id == 123));
可以使用将结果序列展平为一个序列的

project
    .Launches
    .SelectMany(x => x.Phases)
    .Where(x => x.Positions.Any(p => p.Id == 123));

首先,我们希望将
阶段
作为一个平面(不是层次结构)
IEnumerable
;我们可以借助
选择many

   var allPhases = project
     .Launches
     .SelectMany(launch => launch.Phases);
然后,我们可以在
的帮助下过滤这些阶段,其中

   var result = project
     .Launches
     .SelectMany(launch => launch.Phases)
     .Where(phase => phase.Positions.Any(position => position.Id == 123));
   var result = project
     .Launches
     .SelectMany(launch => launch.Phases)
     .FirstOrDefault(phase => phase.Positions.Any(position => position.Id == 123));  
编辑:如果只需要一个
阶段(如果存在),或者
null
如果没有这样的阶段,则将
放在第一个或默认值(而不是
其中
):

   var result = project
     .Launches
     .SelectMany(launch => launch.Phases)
     .Where(phase => phase.Positions.Any(position => position.Id == 123));
   var result = project
     .Launches
     .SelectMany(launch => launch.Phases)
     .FirstOrDefault(phase => phase.Positions.Any(position => position.Id == 123));  

首先,我们希望将
阶段
作为一个平面(不是层次结构)
IEnumerable
;我们可以借助
选择many

   var allPhases = project
     .Launches
     .SelectMany(launch => launch.Phases);
然后,我们可以在
的帮助下过滤这些阶段,其中

   var result = project
     .Launches
     .SelectMany(launch => launch.Phases)
     .Where(phase => phase.Positions.Any(position => position.Id == 123));
   var result = project
     .Launches
     .SelectMany(launch => launch.Phases)
     .FirstOrDefault(phase => phase.Positions.Any(position => position.Id == 123));  
编辑:如果只需要一个
阶段(如果存在),或者
null
如果没有这样的阶段,则将
放在第一个或默认值(而不是
其中
):

   var result = project
     .Launches
     .SelectMany(launch => launch.Phases)
     .Where(phase => phase.Positions.Any(position => position.Id == 123));
   var result = project
     .Launches
     .SelectMany(launch => launch.Phases)
     .FirstOrDefault(phase => phase.Positions.Any(position => position.Id == 123));  

您不需要指定要作为该搜索操作的输出的内容。是项目-查询将是不同的-还是阶段?您不需要指定搜索操作的输出内容。是项目-查询将是不同的-还是阶段?此答案正确,但没有任何解释。此答案正确,但没有任何解释。如何将其转换为
阶段
?它仍在抛出异常:(@Kkt2:您有什么类型的异常?如果您只需要一个
阶段
(不是它们的枚举),请将
放在第一个或默认值
,而不是
在哪里
如何将其抛出到
阶段
?它仍在抛出异常:(@Kkt2:您有什么样的异常?如果您只需要一个
阶段
(不是它们的枚举),请将
放在第一个或默认值
而不是
的何处