在linq里面,说到Select,你应该不陌生,但是如果谈起SelectMany,你可能觉得有点懵…本文试着举一个例子,让你明白它的用法…
一、SelectMany是啥
将序列的每个元素投影到 IEnumerable 并将结果序列合并为一个序列。
换句话说,就是【flatten nested objects】
如下图所示:有四个家庭,每个家庭有N个人,如何把这四个家庭的所有人员一次性列出来?
二、SelectMany怎么玩
1、定义class——家庭和家庭成员
//家庭和家庭成员
class Family{
public string Name{get;set;} //家庭的名字
public List<string> persons{get;set;} //家庭所有成员的名字
}
2、生成赵钱孙李四个家庭的信息
//赵、钱、孙、李四个家庭,以及他们的家庭成员信息
Family[] families =
{ new Family { Name="赵家",
persons = new List<string>{ "赵太爷", "赵太太" ,"赵子龙","赵二"} },
new Family { Name="钱家",
persons = new List<string>{ "钱老板", "钱老板娘","钱大","钱二" } },
new Family { Name="孙家",
persons = new List<string>{ "孙二爷", "孙二娘","孙大果","孙小果" } },
new Family { Name="李家",
persons = new List<string>{ "李治","武则天"} } };
display(families);
----执行结果----
3、统计四个家庭的所有成员名单
var allThePeople = families.SelectMany(f => f.persons).ToList();
display(allThePeople);