La lista de consultas de Linq contiene una lista

Tengo 2 de una clase:

public class ObjectA { public int Id; public string Name; } public class ObjectB { public int Id; public string Name; public List ListOfObjectA; } 

Así que tengo dos listas: una de ObjectB (ListObjectB) y otra contiene una lista de ID de ObjectA (llamada ListOfIdsA). Si esto quiero obtener una lista de ObjectB donde ObjectB.ListOfObjectA está en ListOfIdsA.

Mi primer (y equivocado) enfoque fue

 ListObjectB.Where(p=> ListOfIdsA.Contains(p.ListOfObjectA.Select(b=>b.Id))) 

Pero esto obviamente arroja una excepción. Lo busco en Google, la stack se desbordó, pero estoy pensando que mis habilidades de búsqueda no están yendo tan bien en esto, ¿alguien puede dar un ninja al respecto? (Preferiblemente en la expresión lambda)

¿Está intentando obtener una lista de ObjectBs donde todos los ObjectAs están en ListOfIdsA, o alguno de ellos?

Creo que quieres o bien:

 ListObjectB.Where(p => p.ListOfObjectA.Any(x => ListOfIdsA.Contains(x.Id))) 

o

 ListObjectB.Where(p => p.ListOfObjectA.All(x => ListOfIdsA.Contains(x.Id))) 

(Es posible que desee hacer de ListOfIdsA un HashSet si es de un tamaño significativo, por cierto).