Linq:长列表中的列表列表

时间:2009-03-16 09:41:40

标签: c# linq

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

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

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

list<A> listOfA = computeAList();

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

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

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

2 个答案:

答案 0 :(得分:51)

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

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

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

来自ybo(完全相同的查询,用点表示法表示):

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

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

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

答案 1 :(得分:16)

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

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