• 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

     

  • 相关阅读:
    Merge Two Sorted Lists
    4Sum
    Letter Combinations of a Phone Number
    3Sum Closest
    3Sum
    Longest Common Prefix
    Roman to Integer
    Integer to Roman
    Container With Most Water
    Regular Expression Matching
  • 原文地址:https://www.cnblogs.com/wangxiao666/p/12600163.html
Copyright © 2020-2023  润新知