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 表达式:
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));