2012-03-31 94 views
1

我有一个名为国家,并且每个国家都有一个列表的城镇,它在轮到它有一个街道列表。而且一条街上有很多房子。列表内的列表内列出。很简单。列表中的列表内

我需要生成位于名称以字母“A”开头的国家/地区的房屋列表。这不是一个非常合乎逻辑的例子,但它比我处理的更复杂的结构更容易解释。

这当然不是太复杂,可以通过创建一个List然后ForEaching所有countries.Where(Name.StartsWith('A'))来完成,然后ForEaching所有城镇,最后添加每条街道小镇的名单。

我不喜欢这种方法,所以我想要的东西更漂亮......

难道这通过使用类似的总结Countries.Where()名单上做了什么?如果是这样,怎么样? (因此,在一个单一的声明。)

是的,选择将只在顶部列表,这样应该会更容易。

回答

2

这看起来像Enumerable.SelectMany工作(它允许您取消组合层次结构的一个级别):

List<County> countyList = GetCounties(); 

IEnumerable<County> aCounties = countyList 
    .Where(c => c.Name.StartsWith("A")); 

List<House> aCountyHouses = aCounties 
    .SelectMany(c => c.Towns) 
    .SelectMany(t => t.Streets) 
    .SelectMany(s => s.Houses) 
    .ToList();