在列表项中查找列表项

时间:2013-03-06 17:25:28

标签: c#

我对它的运作方式感到有点困惑。

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列表。 我想要做的是找到一个TestClass,其中包含Stuff ID 0

的任何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();

我试过这个,但它不起作用:

{{1}}

任何人都可以向我解释我做错了吗?

2 个答案:

答案 0 :(得分:5)

您可以使用Any

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

Basicaly Where将选择满足条件的所有行(返回true的那些行),但在此处您还有另一个Where。如果有任何行满足给定条件,Any将返回true

答案 1 :(得分:0)

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

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