LINQ 选择“列表”,其中子列表包含另一个列表中的项

本文关键字:列表 包含 另一个 选择 LINQ | 更新日期: 2023-09-27 18:37:25

我无法理解如何创建此查询。如果项目 Cats 列表包含与 List 2 中其中一只猫的 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;
}

LINQ 选择“列表”,其中子列表包含另一个列表中的项

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

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

您还应该能够使用 intersect 执行此操作(也就是说,如果您的类重写了其 Equals 方法以检查匹配的 ID - 请参阅 MSDN 上的 Intersect):

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

应该适用于嵌套Any

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

试试这个

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