如何减少多个嵌套的foreach块

Web*_*rix 3 .net c# linq foreach

我有以下场景:

var Ids = object1.GetIds(); // returns IEnumerable<int>
foreach (var id in Ids)
{
    foreach (var relatedObject in object1.GetRelatedObjects(id))
    {
    // Do Something with related object
    }
}
Run Code Online (Sandbox Code Playgroud)

在这种情况下,我想摆脱第一个foreach并将这个逻辑减少为单个foreach.我怎么能实现这个目标?

LINQ表达式是否可以使用类似的方法?

das*_*ght 10

当两个循环之间没有任何内容时,在嵌套的循环之前或之后,您可以使用SelectMany"展平"两个循环为一个循环:

foreach (var relatedObject in Ids.SelectMany(object1.GetRelatedObjects)) {
    ...
}
Run Code Online (Sandbox Code Playgroud)

这个循环和你拥有的循环之间的一个主要区别id是不再在范围内.假设relatedObject暴露了一个公共Id属性,这在你的情况下不应该是一个问题,因为你可以提取id后面的

var id = relatedObject.Id;
Run Code Online (Sandbox Code Playgroud)