我有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的ID列表(称为ListOfIdsA)。
如果这我想获得ObjectB的列表,其中ObjectB.ListOfObjectA在ListOfIdsA中。
我的第一个(也是错误的)方法是
ListObjectB.Where(p=> ListOfIdsA.Contains(p.ListOfObjectA.Select(b=>b.Id)))
但这显然引发了异常。我用谷歌搜索它,stackoverflowed,但是我在想我的搜索能力不是很好,有人可以给这个忍者打个招呼吗?
(最好在lambda表达式中)
最佳答案
您是否要获取所有ObjectA都位于ListOfIdsA中或其中任何一个的ObjectB的列表?
我认为您想要:
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>
。)关于c# - Linq查询列表包含一个列表,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/2364090/