Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

LINQ select List where sub-list contains item from another list

Tags:

c#

linq

I can't wrap my head around how to create this query. I need to select the items in List 1, if the items Cats list contains a Cat object matching the ID of one of the Cats in List2. Is this possible? Thank you

List1<pet> List1 = new List<pet>(100);
List2<cat> List2 = new List<cat>(30);

//populate lists, some of the items in List2 (cat) will be in the List1 items Cats list

//classes
class pet{
   string ID;
   List<cat> Cats;
}

class cat {
   string ID;
   string name;
}
like image 819
user2704766 Avatar asked Mar 05 '16 12:03

user2704766


1 Answers

You can just use following LINQ expression:

List1.Where(p => p.Cats.Any(c => List2.Any(c2 => c2.ID == c.ID)));

You should also be able to do that with intersect (That is if your classes have their Equals methods overriden to check for matching IDs - see Intersect on MSDN):

List1.Where(p => p.Cats.Intersect(List2).Any())
like image 129
MarengoHue Avatar answered Oct 01 '22 14:10

MarengoHue