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 );