Linq 中 Select 与SelectMany的区别
2015-06-18 18:24
323 查看
以前一直都是直接用也没有系统的学习一下,最近出去面试受挫很多,也让自己下定目标补充更多的理论知识。以前一直以为 Select 和 SelectMany 没啥太多区别。
今天看Linq 实战发现还是有一些区别的。
如果我们看这两个扩展函数的定义很容易明白——
Select是把要遍历的集合IEnumerable逐一遍历,每次返回一个T,合并之后直接返回一个IEnumerable,
SelectMany则把原有的集合IEnumerable每个元素遍历一遍,每次返回一个IEnumerable,把这些IEnumerable的“T”合并之后整体返回一个IEnumerable。
于是我们写代码可能就有了这样的差别:
使用Select运算符返回的是一个由数据源对象数组组成的序列,而SelectMany 是吧这些数组拆分开来组成一个序列并返回。
今天看Linq 实战发现还是有一些区别的。
如果我们看这两个扩展函数的定义很容易明白——
Select是把要遍历的集合IEnumerable逐一遍历,每次返回一个T,合并之后直接返回一个IEnumerable,
SelectMany则把原有的集合IEnumerable每个元素遍历一遍,每次返回一个IEnumerable,把这些IEnumerable的“T”合并之后整体返回一个IEnumerable。
于是我们写代码可能就有了这样的差别:
var tmp=books.Select(book => book.Authors); foreach(var authors in tmp) { foreach(var author in authors) { Console.WriteLine(author.LastName); } } var tmp1=books.SelectMany(book => book.Authors); foreach(var authors in tmp1) { Console.WriteLine(author.LastName); }
使用Select运算符返回的是一个由数据源对象数组组成的序列,而SelectMany 是吧这些数组拆分开来组成一个序列并返回。
相关文章推荐
- Linux Shell编程入门
- 在Linux系统上安装Wine的教程
- 多继承实例
- spring4.0.5 + quartz1.8.6/2.2.1集群搭建
- 链表题目
- webpack前端模块加载工具
- 读《构建之法》第13,14,15,16,17章
- 鼠标悬停右下角显示div
- python写的日志监控程序,关键字统计,日志大小监控,关键字出现报警并截取日志
- 生物信息记录点点滴滴(一)
- android开源下拉刷新控件PullToRefreshLayout修正BUG
- redis集群部署之codis 维护脚本
- 第二阶段冲刺报告(七)—— 总结
- Hadoop自测题及参考答案
- 在Linux系统中使用logrotate来管理日志文件的方法
- codeforces Round#158 Div.2 D
- IO - 同步,异步,阻塞,非阻塞
- Android Touch事件传递机制
- Android中的类装载器DexClassLoader
- win7 64位pl/sql配置