32

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?

2 Answers 2

57

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);
Sign up to request clarification or add additional context in comments.

2 Comments

@Jon, sorry I didn't see your comment. Now you can include Ray's answer ;). Thanks to both you and Ray.
I've been to this answer about 20 times so far. I don't know why I can't remember "selectmany" and always try "selectall", but it always happens. Lucky this is always just one google away!
17

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

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.