tags:

views:

1258

answers:

3

I've got an object of type A which consists of a list of objects of type B:

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

In my program I have a list of A objects:

list<A> listOfA = computeAList();

and I would like to select all the C strings in that list. The following statement I hoped would give me the result I wanted; it returns a list of lists containing the C's:

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

Is there a way to get a single list of all the C's instead?

+7  A: 

ybo's answer would have been my first response too. The query expression equivalent of this is:

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

For the sake of completeness, the other answers in this thread are variations on the same theme.

From ybo (the exact same query, expressed as dot notation):

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

From Ray Hayes (including the Where clause; I've reformatted slightly):

var query = listOfA.SelectMany(a => a.AList, (a, b) => b.C)
                   .Where(c => c.Length > 0);
Jon Skeet
That was exactly what I was looking for - Thanks a lot Jon!
Chau
@Jon, sorry I didn't see your comment. Now *you* can include Ray's answer ;). Thanks to both you and Ray.
ybo
+4  A: 

I too would have had a similar answer, my only modification was to add the where clause to avoid having empty strings (where C is empty):

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

An excellent overview of the SelectMany() extension method which is the key thing that allows you to easily create a flattened "list of lists" can be found here: Use LINQ's SelectMany Method to "Flatten" Collections - Dan's IK Blog

Shaun
The input is appreciated, but this question is 12 months old.
Anthony Pegram
Well, as long as I don't delete my question, I guess the input can help understand if in doubt :)
Chau
Yes, 12 months old, but you still found it :) There seems to be some unease I've noticed on Stackoverflow where people are worried about karma whoring, or whatever it's equivalent here would be, I'm just interested in getting relevant and helpful results to my question.
Shaun