Linq查询列表包含一个列表

我有2个class级的:

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

所以我有两个列表:ObjectB(ListObjectB)和另一个包含ObjectA(称为ListOfIdsA)的id列表。 如果这我想获得ObjectB列表ObjectB.ListOfObjectA在ListOfIdsA中。

我的第一个(也是错误的)方法是

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

但是这显然引发了一个例外。 我谷歌它,stackoverflowed,但我认为我的search技能不是很好,在这个任何人都可以给这个忍者awser? (最好在lambdaexpression式中)

你想获得ObjectB的列表,其中所有的ObjectAs在ListOfIdsA中,或者其中的任何一个?

我想你要么:

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

要么

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

(如果ListOfIdsA的大小很大,你可能希望使ListOfIdsA成为一个HashSet<string> 。)