2015-03-31 2 views
0

У меня есть следующая структура данных. Объект А содержит список Б. В содержит список C.Получить объект из подкатегория

A 
{ 
    int id; 
    List<B>; 
} 

B 
{ 
    int id; 
    List<C>; 
} 

C 
{ 
    int id; 
} 

У меня есть объект А, и у меня есть B.id и c.id, что я хочу найти. У меня есть LINQ, чтобы сделать это:

A = SomeMethodToGetA(); 
int bid = 2; 
int cid = 20; 
B foundB = A.B.Where(item => item.id = bid).First() 
C foundC = B.C Where(item => item.id = cid).First() 

мне было интересно, если есть способ, чтобы выполнить вышеуказанные заявления в одной инструкции LINQ.

ответ

1

Конечно, только цепь двух Single запросов:

C foundC = A.B.Single(item => item.id == bid) 
      .C.Single(item => item.id == cid) 

Это будет сгенерировано исключение, если нет соответствия B или соответствия C в пределах этого B, но ваши первоначальные запросы будут также. Если это проблемы, ваш исходный запрос (добавление нулевой проверки) может быть более прямым.

+0

используйте '==' ... присваивание не будет компилироваться ... –

+0

@AndreasNiedermair сделано. –

+1

Я бы также добавил, что Single и First семантически разные, хотя последнее обычно злоупотребляют. – Casey

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