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

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

我想根据名称值从majorList获取A的实例,但不需要在majorList中包含它。 minorList也可以包含名称。我怎样才能使用Linq。如果它的存在只有majorList我可以用Linq list inside列表查询

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

喜乔恩,这是正确的吗? 'a a = majorList.First(x => {return a.name == name || minorList.Any(x => ContainsName(x,name));});' –

+0

@NiranjanKala:No - you've got有方法,否则你不能递归地调用它......如果你有方法,你可以从lambda表达式中调用它。 –

+0

感谢乔恩,+1解决我的困惑和这个很好的答案。 –