我有家庭清单,每个家庭都包含居民清单。我想要一个函数返回所有家庭所有居民的列表。使用lambda将清单中的元素列表转换为单个清单
我到目前为止有:
public List<Resident> Residents() {
var list = new List<Resident>();
Households.ForEach(x => list.AddRange(x.Residents));
return list;
}
是否有可能用lambda来缩短这个?事情是这样的:
public List<Resident> Residents => { ??? }
我知道,如果家庭都列出的清单,我可以使用SelectMany
,但事实并非如此。
EDIT1:
要清楚,家庭是一个类,而不是一个容器。
EDIT2:
我尝试以下
public List<Resident> Residents => Households.SelectMany(h => h.Residents);
然而,这给我的错误:
error CS1061: 'List< Household>' does not contain a definition for 'SelectMany' and no extension method 'SelectMany' accepting a first argument of type 'List< Household>' could be found (are you missing a using directive or an assembly reference?)
EDIT3:
对不起,我以为我很清楚。家庭是有居民的名单一类,像这样:
class Household {
public List<Resident> Residents { get; }
}
我不明白你对SelectMany的评论。你为什么不能'Households.SelectMany(x => x.Residents)'? –
如果不是列表,Hoseholds是什么类型?你不能在'之前做'.ToList()'吗?或者你忘了添加'using'语句,这就是为什么你看不到'SelectMany'? – Niklas
正如@KooKiz指出的那样,从你的代码看起来你可以简单地做SelectMany。 –