在列表项中查找列表项

本文关键字:列表 查找 | 更新日期: 2023-09-27 18:02:30

我对这是如何工作的有点困惑。

class TestClass
{
    public int ID {get;set;}
    public List<Stuff> StuffList {get; set;}
}
class Stuff
{
    public int ID {get;set;}
    public string Description {get;set;}
}

因此,每个TestClass中都有一个Stuff的列表。我想做的是找到一个包含任何StuffID0TestClass

List<TestClass> TestList = RetrieveAllTestLists();
//Pseudocode:
//
// Find all TestClass in TestList that contain a Stuff with ID == 0;

我试过了,但没用:

List<TestClass> TestList = RetrieveAllTestLists().Where(x=> x.StuffList.Where(y=> y.ID == 0)).ToList();

有人能向我解释一下我做错了什么吗?

在列表项中查找列表项

您可以使用Any:

List<TestClass> TestList = RetrieveAllTestLists().
                           Where(x => x.StuffList.Any(y=> y.ID == 0)).ToList();

Basicaly Where将选择所有满足条件的行(返回true的行(,但在这个位置您有另一个Where。如果存在满足给定条件的任何行,则Any将返回true

List<TestClass> TestList = RetrieveAllTestLists().Where(x=> x.StuffList.Any(y=> y.ID == 0)).ToList();

Any((表示至少对于一个元素或IEnumerable,参数中给定的谓词返回true