在列表中的列表中列出

时间:2012-03-31 19:38:48

标签: linq c#-4.0

我有一个名为“国家/地区”的列表,每个国家/地区都有一个“城镇”列表,其中包含“街道”列表。一条街上有许多房屋。列表中的列表中列出。非常简单。

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

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

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

可以通过在Countries.Where()列表中使用像Aggregate这样的东西吗?如果是这样,怎么样? (因此,在一个声明中。)

是的,选择将仅在顶部列表中,因此应该更容易。

1 个答案:

答案 0 :(得分: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();