我无法解决如何创建此查询的问题。如果项目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;
}
答案 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));