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?
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);
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 );
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With