2013-03-06 4 views
3

Я немного смущен тем, как это работает.Поиск элемента списка в элементе списка

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(); 

Может кто-нибудь объяснить мне, что я сделал не так?

ответ

5

Вы можете использовать Any:

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

Basicaly Where будут выбраны все строки, которые удовлетворяет условию (возвращающимся true), но в этом месте у вас есть еще один Where. Any вернет true, если бы какой-либо ряд выполнял данное условие.

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

Любой() означает, что по крайней мере, для одного элемента или IEnumerable, предикат дан в параметре возвращает истинное

Смежные вопросы