Linq 中 Select 与SelectMany的区别

以前一直都是直接用也没有系统的学习一下,最近出去面试受挫很多,也让自己下定目标补充更多的理论知识。以前一直以为 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 是吧这些数组拆分开来组成一个序列并返回。

每天进步一点点,每个人的敌人只有自己,努力超越自己才是人生终极目标。
原文地址:https://www.cnblogs.com/davezhao/p/4586705.html