LINQ选择列表,其中子列表包含来自另一个列表的项目

时间:2016-03-05 12:22:36

标签: c# linq

我无法解决如何创建此查询的问题。如果项目Cats列表包含与List2中某个Cats的ID匹配的Cat对象,我需要选择列表1中的项目。这可能吗?谢谢

List1<pet> List1 = new List<pet>(100);
List2<cat> List2 = new List<cat>(30);

//populate lists, some of the items in List2 (cat) will be in the List1 items Cats list

//classes
class pet{
   string ID;
   List<cat> Cats;
}

class cat {
   string ID;
   string name;
}

3 个答案:

答案 0 :(得分:12)

您可以使用以下LINQ表达式:

List1.Where(p => p.Cats.Any(c => List2.Any(c2 => c2.ID == c.ID)));

您也应该能够使用相交(即如果您的类重写了Equals方法以检查匹配的ID - 请参阅Intersect on MSDN):

List1.Where(p => p.Cats.Intersect(List2).Any())

答案 1 :(得分:4)

这适用于嵌套的Any

var result = List1.Where(p => List2.Any(l => p.Cats.Any(c => c.ID == l.ID)));

答案 2 :(得分:1)

试试这个

var naughtycats = List1.Where(pet => List2.Select(cat => cat.ID).Contains(pet.ID));