原文地址:https://msdn.microsoft.com/zh-cn/library/bb546168.aspx#Mtps_DropDownFilterText

投影运算

其他版本

投影是指将对象转换为一种新形式的操作,该形式通常只包含那些将随后使用的属性。 通过使用投影,您可以构建依据每个对象生成的新类型。 您可以映射属性,并对该属性执行数学函数。 还可以在不更改原始对象的情况下映射该对象。

下面一节中列出了执行投影的标准查询运算符方法。

方法

方法名

说明

C# 查询表达式语法

Visual Basic 查询表达式语法

更多信息

Select

映射基于转换函数的值。

select

Select

Enumerable.Select

Queryable.Select

SelectMany

映射基于转换函数的值序列,然后将它们展平为一个序列。

使用多个 from 子句

使用多个 From 子句

Enumerable.SelectMany

Queryable.SelectMany

查询表达式语法示例

Select

下面的示例使用 C# 中的 select 子句或 Visual Basic 中的 Select 子句来映射字符串列表中每个字符串的第一个字母。

C#
VB

            List<string> words = new List<string>() { "an", "apple", "a", "day" };var query = from word in wordsselect word.Substring(0, 1);foreach (string s in query)Console.WriteLine(s);/* This code produces the following output:aaad*/

SelectMany

下面的示例使用多个 from 子句(在 C# 中)或 From 子句(在 Visual Basic 中)来映射字符串列表中每个字符串中的每个单词。

C#
VB

            List<string> phrases = new List<string>() { "an apple a day", "the quick brown fox" };var query = from phrase in phrasesfrom word in phrase.Split(' ')select word;foreach (string s in query)Console.WriteLine(s);/* This code produces the following output:anappleadaythequickbrownfox*/

Select 与 SelectMany

Select() 和 SelectMany() 的工作都是依据源值生成一个或多个结果值。 Select() 为每个源值生成一个结果值。 因此,总体结果是一个与源集合具有相同元素数目的集合。 与之相反,SelectMany() 将生成单一总体结果,其中包含来自每个源值的串联子集合。 作为参数传递到 SelectMany() 的转换函数必须为每个源值返回一个可枚举值序列。 然后,SelectMany() 将串联这些可枚举序列以创建一个大的序列。

下面两个插图演示了这两个方法的操作之间的概念性区别。 在每种情况下,假定选择器(转换)函数从每个源值中选择一个由花卉数据组成的数组。

下图描述 Select() 如何返回一个与源集合具有相同元素数目的集合。

下图描述 SelectMany() 如何将中间数组序列串联为一个最终结果值,其中包含每个中间数组中的每个值。

代码示例

下面的示例比较 Select() 和 SelectMany() 的行为。 代码将通过从源集合的每个花卉名称列表中提取前两项来创建一个“花束”。 在此示例中,转换函数Select<TSource, TResult>(IEnumerable<TSource>, Func<TSource, TResult>) 使用的“单一值”本身就是一个值集合。 这需要额外的 foreach(Visual Basic 中为 For Each)循环,以便枚举每个子序列中的每个字符串。

C#
VB

class Bouquet
{public List<string> Flowers { get; set; }
}static void SelectVsSelectMany()
{List<Bouquet> bouquets = new List<Bouquet>() {new Bouquet { Flowers = new List<string> { "sunflower", "daisy", "daffodil", "larkspur" }},new Bouquet{ Flowers = new List<string> { "tulip", "rose", "orchid" }},new Bouquet{ Flowers = new List<string> { "gladiolis", "lily", "snapdragon", "aster", "protea" }},new Bouquet{ Flowers = new List<string> { "larkspur", "lilac", "iris", "dahlia" }}};// *********** Select ***********            IEnumerable<List<string>> query1 = bouquets.Select(bq => bq.Flowers);// ********* SelectMany *********IEnumerable<string> query2 = bouquets.SelectMany(bq => bq.Flowers);Console.WriteLine("Results by using Select():");// Note the extra foreach loop here.foreach (IEnumerable<String> collection in query1)foreach (string item in collection)Console.WriteLine(item);Console.WriteLine("\nResults by using SelectMany():");foreach (string item in query2)Console.WriteLine(item);/* This code produces the following output:Results by using Select():sunflowerdaisydaffodillarkspurtuliproseorchidgladiolislilysnapdragonasterprotealarkspurlilacirisdahliaResults by using SelectMany():sunflowerdaisydaffodillarkspurtuliproseorchidgladiolislilysnapdragonasterprotealarkspurlilacirisdahlia*/}

转载于:https://www.cnblogs.com/niaowo/p/4721173.html

linq里的select和selectmany操作 投影运算相关推荐

  1. 计算机二级投影运算怎么看,投影运算

    本词条缺少概述图,补充相关内容使词条更完整,还能快速升级,赶紧来编辑吧! 投影(Projection)运算是指将对象转换为一种新形式的操作,该形式通常只包含那些将随后使用的属性.通过使用投影,您可以构 ...

  2. Select和SelectMany之间的区别

    我一直在搜索Select和SelectMany之间的区别,但我一直找不到合适的答案. 我需要学习使用LINQ To SQL的区别,但我发现的只是标准数组示例. 有人可以提供LINQ To SQL示例吗 ...

  3. NET问答:Select 和 SelectMany 的区别

    咨询区 Tarik: 我已经 google 搜索了 Select 和 SelectMany 之间的区别,但我并没有找到合适的答案,我现在急切的需要知道在 Linq to SQL 时两者的区别而不是给我 ...

  4. Select()和SelectMany()的区别

    Select与SelectMany的区别 Select() 和 SelectMany() 的工作都是依据源值生成一个或多个结果值. Select() 为每个源值生成一个结果值.因此,总体结果是一个与源 ...

  5. 数据库操作 linq php,.NET_asp.net使用LINQ to SQL连接数据库及SQL操作语句用法分析,本文实例讲述了asp.net使用LINQ t - phpStudy...

    asp.net使用LINQ to SQL连接数据库及SQL操作语句用法分析 本文实例讲述了asp.net使用LINQ to SQL连接数据库及SQL操作语句用法.分享给大家供大家参考,具体如下: LI ...

  6. IEnumerable.Select和SelectMany的区别

    例子(一个人可以有多个手机) public class People{public string Name { get; set; }public List<Phone> Phone { ...

  7. 关于在angular4.X里使用select默认选择和选中满足条件的option

    angular4里使用select一般如下: <select class="form-control" required name="actionType" ...

  8. K项目的一些心得之全球模板里的几个骚操作

    K项目的一些心得之全球模板里的几个骚操作 1,数据迁移阶段,物料主数据分类视图里,batch class的代码跟物料号相同. 这意味着如果需要迁移的物料有1万个,导入程序会自动创建1万023类型的分类 ...

  9. 在Java 7里如何对文件进行操作

    导读:本文是从<Manipulating Files in Java 7>这篇文章翻译而来. 文章内容如下: 下面的代码片段是由经过验证的程序修改而来.观察这些代码片段你会发现,跟以前的版 ...

最新文章

  1. ProtoBuf 简单测试
  2. equals方法变量和常量位置区别
  3. iOS7 UIKit Dynamics 的初步研究
  4. SAP ABAP和Java里的弱引用(WeakReference)和软引用(SoftReference)
  5. MySQL中使用外键约束的注意事项
  6. lighthouse使用_如何在CircleCI中使用Lighthouse
  7. 反转!继SDA之后 WiFi联盟、蓝牙技术联盟、JEDEC协会恢复华为会员资格
  8. Springboot启动扩展点超详细总结,再也不怕面试官问了
  9. php投票的进度条,小程序实现投票进度条
  10. leetcode 410. 分割数组的最大值(二分法)
  11. Qt4_写FTP客户端
  12. 原创 迈达斯GTS-NX网格模型(FPN)导入Flac3D 6.0 源码
  13. Error:(292, 40) java: -source 1.5 中不支持 diamond 运算符 (请使用 -source 7 或更高版本以启用 diamond 运算符) ........
  14. Linux cat命令
  15. ESXI VM快照删除卡在99%
  16. 为FishBot模型注入物理属性并在Gazebo中显示
  17. 连续系统的复频域分析 matlab,(连续系统复频域分析.doc
  18. Oracle实现US7ASCII到ZHS16GBK数据迁移正常显示中文
  19. Could not enlist in transaction on entering meta-aware object
  20. 记录手机root后安装xposed框架后变砖无法开机的问题

热门文章

  1. 枚举如何设置空白_2019-07-04 用VBA设置word中shape对象相对位置
  2. [leetcode]208. 实现 Trie (前缀树)
  3. [leetcode]241. 为运算表达式设计优先级
  4. hduoj 6000 2016CCPC-final B. Wash(贪心)
  5. 设置mybb论坛后台显示为中文
  6. [debug] Expected to have finished reduction in the prior iteration before starting a new one.
  7. caffe:制作自己的数据集train.txt和val.txt,生成lmdb文件
  8. 第3节:vue-router如何参数传递
  9. button点击事件不响应的解决方法(子视图大小超过父视图)
  10. SharePoint 2013版本功能对比介绍