Reputation: 1518
Given a list of Parent objects that each have a list of Child objects, I want to find the child object matching a specific ID.
public class Parent
{
public int ID { get; set; }
public List<Child> Children { get; set; }
}
public class Child
{
public int ID { get; set; }
}
Now I want the Child object having a specific ID:
List<Parent> parents = GetParents();
Child childWithId17 = ???
How can I do this using Linq?
Upvotes: 12
Views: 20536
Reputation: 8937
You can use SelectMany:
Child childWithId17 = parents.SelectMany(p => p.Children)
.Where(ch=>ch.ID==17)
.FirstOrDefault();
Upvotes: 7
Reputation: 113402
I think you want:
Child childWithId17 = parents.SelectMany(parent => parent.Children)
.FirstOrDefault(child => child.ID == 17);
Note that this assumes that Parent's Children property won't be a null-reference or contain null Child references.
Upvotes: 27