<p>Sorry, that title just hurts.  I'm wondering if there is a Linq to collections extension method that collapses the following code segment into a single line:</p>

<pre><code>public IEnumerable&lt;Child&gt; GetAllChildren(IEnumerable&lt;Parent&gt; parents){

  var result = new List&lt;Child&gt;();

  foreach(Parent parent in parents)
    foreach(Child child in parent.Children)
      result.Add(child);

  return result;
}
</code></pre>

<p>If you can collapse that into a single statement, try it on insane difficulty:</p>

<pre><code>public IEnumerable&lt;Child&gt; GetAllChildren(IEnumerable&lt;Grandparent&gt; nanas){

  var result = new List&lt;Child&gt;();

  foreach(Grandparent papa in nanas)
    foreach(Parent parent in papa.Children)
      foreach(Child child in parent.Children)
        result.Add(child);

  return result;
}
</code></pre>

This will work:
```
```
public IEnumerable<Child> GetAllChildren(IEnumerable<Parent> parents)
{
    return from parent in parents
           from child in parent.Children
           select child;
}
```
```
and then this:
```
```
public IEnumerable<Child> GetAllChildren(IEnumerable<Grandparent> nanas)
{
    return from papa in nanas
           from parent in papa.Children
           from child in parent.Children
           select child;
}
```
```
Note, in this example I'm not actually returning a list, I'm returning an IEnumerable data source that until you start to foreach over it, or similar, won't actually do any processing.
If you need to return a list, modify each return statement as follows:
```
```
return (from .....
            ...
            select child).ToList();
```
```