Linq查询列表包含一个列表

时间:2010-03-02 15:08:27

标签: 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;
}

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

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

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

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

1 个答案:

答案 0 :(得分:90)

您是否想要获取一个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设为HashSet<string>,如果它的大小很大,顺便说一句。)