LINQ入门笔记----LINQ To Object:SelectMany()

LINQ To Object

    概述

        LINQ To Object是用于操作内存对象的LINQ编程接口,包含了大量的查询操作符,针对内存中的集合对象进行操作.

        LINQ To Object的实现基于IEnumerable泛型接口、序列(sequences)以及标准查询操作符(Standard Query Operators)等基本概念.其中,IEnumerable泛型接口是使用C#2.0泛型技术实现的一个接口,该接口与IEnumerable类似,允许对接口内部的元素进行列举操作;序列是一个专门术语,表示一个实现了IEnumerable接口的集合对象.

        LINQ To Object的大部分操作是针对序列的.标准查询操作符本质上是一些拓展方法,这些拓展方法定义在静态类System.Linq.Enumerable 中,其原型的第一个参数(带this修饰符的参数)是IEnumerable类型.由于这些方法都是扩展方法,它们可以在IEnumerable实例对象上直接调用,无需为调用传递一个类型为IEnumerable的对象作为第一个参数.

        要在代码中使用LINQ To Object标准查询操作符,需要在代码中添加using System.Linq 指令,以引入必要的命名空间.

    SelectMany()

                                          <SelectMany的参数信息>

            SelectMany 将序列的每个元素投影到IEnumerable 并将结果序列合并为一个序列.关于这里我依然存在很多的疑问,比如关系运算中的投影运算,Select和SelectMany的差别,他们的用法,目前拥有的知识太少了,这一步的确难了一些,尽管我断点观察了它们的值,也发现了一些区别,虽然无法总结无法解释,但是依然选择将它们贴出来,一来是有想要寻求帮助的想法;二来是想之后有能力回过头来填坑(不会吃灰的).所以具体区别如下所示:

首先是定义的数组:

items是SelectMany()方法得到的结果:

items2是Select()方法得到的结果:

 

总结:

        首先说明一下过程,我定义了一个字符串数组,其中元素分别如图所示,而之后使用split方法以','分隔数组,然后将值与索引值分别给了word和Index,SelectMany() 方法在输出时可以访问word属性和Index属性,而且从图中可以看出他们似乎存在于一个很大的集合中,也就是说他们属于同一级别下.反观Select() 方法,以同样的写法获取返回值,但是在访问输出的时候并不可以通过自定义的word和Index访问值和索引,而且从图中看到的是返回的集合有5个元素,这五个元素中包含存在子集,而子集中拥有定义过的word和Index.这是肉眼可见的区别.

        另外,关于逻辑运算中的投影与选择的关系,我查阅了一部分资料,结果是这样的:

                选择:通过选择获取行结果;

                投影:通过投影获取列

 

集合R

A

B

C

5

6

2

7

3

1

9

8

6

 

投影A,B

A

C

5

2

7

1

9

6

 

选择A>6

A

B

C

7

3

1

9

8

6

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值