Six 投影运算 投影是指将对象转换为一种新形式的操作,该形式通常只包含那些将随后使用的属性。通过使用投影,您可以构建依据每个对象生成新的类型。您可以映射属性,并对该属性执行数学函数,还可以在不更改原始对象的情况下映射该对象。 方法 | | | | | Select | | | Enumerable.Select
Queryable.Select
| | SelectMany | | | Enumerable.SelectMany
Queryable.SelectMany
| |
Select语法 List<string> words= new List<string>(){ "an", "apple","a", "day"}; var query = from wordin words select word.Substring(0, 1); foreach (string s in query) Console.WriteLine(s); Selectmany语法 List<string>phrases = new List<string>(){ "an apple a day", "the quick brown fox" }; var query = fromphrase in phrases from word inphrase.Split(' ') select word; foreach (string s in query) Console.WriteLine(s); Select()和SelectMany() Select() 和 SelectMany() 的工作都是依据源值生成一个或多个结果值。Select() 为每个源值生成一个结果值。 因此,总体结果是一个与源集合具有相同元素数目的集合。与之相反,SelectMany() 将生成单一总体结果,其中包含来自每个源值的串联子集合。作为参数传递到 SelectMany() 的转换函数必须为每个源值返回一个可枚举值序列。然后,SelectMany() 将串联这些可枚举序列以创建一个大的序列。 下面两个插图演示了这两个方法的操作之间的概念性区别。在每种情况下,假定选择器(转换)函数从每个源值中选择一个由花卉数据组成的数组。 下图描述 Select() 如何返回一个与源集合具有相同元素数目的集合。 file:///C:\Users\hang\AppData\Local\Temp\msohtmlclip1\01\clip_image001.png 下图描述SelectMany() 如何将中间数组序列串联为一个最终结果值,其中包含每个中间数组中的每个值 file:///C:\Users\hang\AppData\Local\Temp\msohtmlclip1\01\clip_image002.png
|