Arpit Khandelwal
Arpit Khandelwal

Reputation: 1803

how to filter from nested collections without ForEach?

I have an entity say Type A with property type List of B. Type B also has a property of type List of C.

I want to apply the filter on object of A such that there would be only C objects in the List of C for which their Selected property is True.

This can be done like:

A objA = A.ListB.ForEach(b => {b.ListC.RemoveAll(c => c.Selected == false);});

But I don't have to remove all those C Objects which have Selected = false. I only want to filter them.

Any ideas?


More explanation: There is an object of Type A, with List of B property. In each B object of A's List of B, there exists a List of C property. C object has a Selected Property. Now, all I need is- an object of A with List of B, where in each of B's List of C has only those C objects which have Selected = true. The desirable output is type A. List B shouldn't be filtered only List C needs to be filtered.

Upvotes: 0

Views: 2451

Answers (3)

Marc Gravell
Marc Gravell

Reputation: 1062865

var qry = from b in A.ListB
          select new {B=b,ListC=b.ListC.Where(x => x.Selected).ToList()};

note that this is just an anonymous tuple; we can't show code to reconstruct an A/B etc without more info on how your code is structured, what props there are, etc

Upvotes: 0

Henrik
Henrik

Reputation: 23324

If you want a list containing all the selected C objects, you can do this:

List<C> selectedC = A.ListB.SelectMany( b => b.ListC.Where( c => c.Selected)).ToList();

Upvotes: 1

Anders Zommarin
Anders Zommarin

Reputation: 7274

What about this:

A.ListB.Where( b => b.ListC.Exists( c => c.Selected ) )

Is this what you want?

Upvotes: 2

Related Questions