Linq:长列表中的列表列表

我有一个类型为A的对象,它包含一个B类对象列表:

 class A { list Alist;} class B { string C; string D;} 

在我的程序中,我有一个A对象列表:

 list listOfA = computeAList(); 

我想选择该列表中的所有C字符串。 我希望以下陈述能给我我想要的结果; 它返回一个包含C的列表列表:

 var query = from objectA in listOfA select objectA.Alist.FindAll(x => xCLength > 0).C; 

有没有办法获得所有C的单一列表?

ybo的回答也是我的第一个回答。 与此等价的查询表达式是:

 var query = from a in computeAList() from b in a.Alist select bC; 

为了完整起见,此主题中的其他答案是同一主题的变体。

从ybo(完全相同的查询,表示为点表示法):

 var query = listOfA.SelectMany(a => a.Alist, (a, b) => bC); 

来自Ray Hayes(包括Where子句;我稍微重新格式化):

 var query = listOfA.SelectMany(a => a.AList, (a, b) => bC) .Where(c => c.Length > 0); 

我也会有类似的答案,我唯一的修改是添加where子句以避免空字符串(其中C为空):

 listOfA.SelectMany( a => a.AList, (a, b) => bC ).Where( c => c.Length > 0 );