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>
。)