Linq查询列表包含一个列表

Ber*_*rto 48 c# linq

我有2个班级:

public class ObjectA
{
    public int Id;
    public string Name;
}

public class ObjectB
{
    public int Id;
    public string Name;
    public List<ObjectA> ListOfObjectA;
}
Run Code Online (Sandbox Code Playgroud)

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

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

ListObjectB.Where(p=> ListOfIdsA.Contains(p.ListOfObjectA.Select(b=>b.Id)))
Run Code Online (Sandbox Code Playgroud)

但这显然会引发异常.我谷歌它,stackoverflowed,但我认为我的搜索技能在这方面不是很好,任何人都可以给这个忍者!(优选在lambda表达式中)

Jon*_*eet 92

您是否正在尝试获取所有 ObjectAs在ListOfIdsA中的ObjectB列表,或者其中任何一个?

我想你想要:

ListObjectB.Where(p => p.ListOfObjectA.Any(x => ListOfIdsA.Contains(x.Id)))
Run Code Online (Sandbox Code Playgroud)

要么

ListObjectB.Where(p => p.ListOfObjectA.All(x => ListOfIdsA.Contains(x.Id)))
Run Code Online (Sandbox Code Playgroud)

(你可能想要制作ListOfIdsA一个HashSet<string>大尺寸的,顺便说一下.)

  • @Justin:嗯哪里,All和Any*都是*扩展方法:) (3认同)