• linq读书笔记3-操作符之select与selectmany


    linq对数据的查询方式的表达形式主要有两种:

    var demo =from p in pList

          where p.id=***

                    select p;

    var demo =pList.where(p=>p.id=***) select p;

    以上是linq最近常见的两种表达形式。linq支持多种操作符的操作,下面对主要的常操作符进行说明:

    select 与selectmany

    select操作符声明:

    public static IEnumerable<s> select<T,S>{

      this IEnumerable<T> source,

         Func<T,S> selector

    }

    select 操作符将根据selector函数对源序列中的每个元素进行求值运算并依次返回该值,构成返回值序列.

    举个简单例子:

    var book= books.Select(p=>p.Name); 

    以上的select子句就该一个book对象序列投影到了一个字符串的对象序列,当然可以有更复杂的应用如把序列投影到一个对象等,如以下代码就是从book集合中找出publisher对象,就将序列投影到一个具体的对象上。

    var publisher=from p in books

          select p.publisher

    在select 返回的结果集中,其中的对象即可以是原来的对象,也可以是包含若干字段的一个新对象。

    如下例:

    var Books=from book in sampleBookData.Books

          select new{book.title,book.price,book.publisher.Name};

    也可以写成如下形式:

    var Books=from book in sampleBookData.Books

          select new{

                 Title=book.title,

                 Price=book.price,

                publisherName=book.publisher.Name

                };

    此类操作创建出一个原数据的一个投影,也是将此类操作归类为投影的一个重要的原因。

    下面来看另一个投影操作:selectmany

    操作符声明:

    public static IEnumerable<s> select<T,S>{

      this IEnumerable<T> source,

         Func<T,IEnumerable<s>> selector

    }

    与select  不同 的是selectmany返回的是一个序列.

    selectmany与select 不同的是它会把返回序列集合中的各个元素连接起来形成一个新的序列

    具体先来比较两段代码:

    var tmp=sampleBook.select(p=>p.books.author);

    foreach(var item in tmp)

    {

        foreach(var item1 in item.author)

      {

         console.writeline(item1.name);

          }

    }

    以上代码即我们要实现查询所有图书中的作者的信息,book对象的author属性是由author对象来组成的,所以select的的操作返回了由这些对像数组组成的对像序列,即返回了book与author,book包含了author的对像序列

    下面来看selectMany的代码

    var tmp=sampleBook.selectmany(p=>p.books.author);

    foreach(var item in tmp)

    {

      console.writeline(item.Name);

    }

    可以明显看出来,selectmany的代码明显简洁了很多,我们需要的是作者的信息,并不需要返回全部的序列信息,而selectmany正好可以很聪明的做到将两个序列分开后组成一个新的序列返回给我们,而这也正是我们需要的结果.

  • 相关阅读:
    java集合框架复习(一)
    java集合框架复习
    java集合框架
    Mysql视图的作用及其性能分析
    php语法基础
    MySQL UNION 与 UNION ALL 语法与用法
    mysql fetch 系列函数
    跨线程传递数据解决方案 ThreadLocal 和 HystrixRequestVariableDefault
    java中带参数的try(){}语法含义是什么?
    Activiti 设置comment的用户
  • 原文地址:https://www.cnblogs.com/lijintian/p/3815673.html
Copyright © 2020-2023  润新知