Linq查询列表包含列表
问题描述:
我有2类的:Linq查询列表包含列表
public class ObjectA
{
public int Id;
public string Name;
}
public class ObjectB
{
public int Id;
public string Name;
public List<ObjectA> ListOfObjectA;
}
所以,我有两个列表:一个对象B(ListObjectB)和另一种包含(称为ListOfIdsA)对象A的ID的列表。 如果这我想获得ObjectB的列表,其中ObjectB.ListOfObjectA在ListOfIdsA中。
我的第一个(错误的)方法是
ListObjectB.Where(p=> ListOfIdsA.Contains(p.ListOfObjectA.Select(b=>b.Id)))
但这显然会抛出异常。我谷歌它,stackoverflowed,但我认为我的搜索技能不太好,在这个,任何人都可以给这个忍者awser? (Prefereably在lambda表达式)
答
你试图让ObjectBs的列表,其中所有ObjectAs的在ListOfIdsA,或其中任何?
我想你想要么:(你可能想使ListOfIdsA
一个HashSet<string>
,如果它是显著的大小,顺便说一句)
ListObjectB.Where(p => p.ListOfObjectA.Any(x => ListOfIdsA.Contains(x.Id)))
或
ListObjectB.Where(p => p.ListOfObjectA.All(x => ListOfIdsA.Contains(x.Id)))
学到新的东西每天......出于某种原因,我在考虑扩展方法是解决这个问题的方法。 – 2010-03-02 15:12:41
我想要它们中的任何一个。 Thx的快速反应(这是我的第一个问题在这里,该死的,这是快!) – Berto 2010-03-02 15:21:03
@Justin:那么,所有和任何* * *扩展方法:) – 2010-03-02 15:35:32