如何在C# LINQ中合并多个列表?(禁用Lambda表达式)
用LINQ查询表达式合并多个集合为单一列表
嗨,别担心,这事儿其实挺容易搞定的!你要实现的就是把每个thing通过Function(thing)生成的小列表,全部合并成一个长列表——LINQ里专门有个机制干这个,用查询表达式写的话,只需要嵌套一个from就行,完全不用Lambda表达式~
你原来的代码可以改成这样:
var results = from thing in AnArrayOfThings from item in Function(thing) select item;
咱们来拆解一下这个逻辑:
- 首先遍历
AnArrayOfThings里的每一个thing - 对每个
thing,调用Function(thing)拿到对应的小列表 - 接着把每个小列表里的每一个
item都“拉出来”,最终所有item就会自动合并成一个单一的集合,这和你写的foreach循环里不断合并列表的逻辑完全等价。
如果之后你想尝试Lambda写法(其实也很简单),对应的代码是这样的:
var results = AnArrayOfThings.SelectMany(thing => Function(thing));
不过既然你现在更习惯查询表达式,前面那个嵌套from的写法就完全够用啦。
内容的提问来源于stack exchange,提问作者user4214969
相关产品推荐
相关产品推荐

