2012-06-12 3 views
0
Class A 
{ 
    string name; 
    IList<A> minorList = new List<A>(); 
} 

IList<A> majorList = new List<A>(); 

Я хочу, чтобы получить экземпляр от majorList в зависимости от значения имени, но это не обязательно иметь его в majorList. minorList может также содержать имя. Как я могу получить его с помощью Linq. Если есть только majorList я могу получить его с помощьюсписок Linq в запросе списка

A a = majorList.First(s => s.Name == "Name"); 

Как о, если это не в majorList, но в некоторых из Перечня экземпляра majorList?

ответ

3

Похоже, вы хотите что-то вроде:

bool ContainsName(A a, string name) 
{ 
    return a.name == name || a.minorList.Any(x => ContainsName(x, name)); 
} 

Тогда:

A a = majorList.First(x => ContainsName(x, name)); 

Конечно, вы в конечном итоге с проблемой, если есть какие-то циклы в списках ...

+0

Hi Джон, это правильно? 'A a = majorList.First (x => {return a.name == name || minorList.Any (x => ContainsName (x, name));});' –

+0

@NiranjanKala: Нет - у вас есть чтобы иметь этот метод, иначе вы не можете его рекурсивно вызывать ... и если у вас есть этот метод, вы можете также его вызвать из выражения лямбда. –

+0

спасибо Jon, +1 за то, что разрешил мое замешательство и этот приятный ответ. –

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