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正好可以很聪明的做到将两个序列分开后组成一个新的序列返回给我们,而这也正是我们需要的结果.

linq读书笔记3-操作符之select与selectmany的更多相关文章

  1. linq读书笔记2-查询内存中的对象

    上次我们说到了linq对数组内容的检索,自.net2.0以后,泛型成了很常见的一种应用技术,linq对泛型的检索也提供了完善的支持 如对list类型的支持,范例如下: class Program    ...

  2. linq读书笔记1-linq 初步

    至于linq是什么之类的已经有过太多的文章介绍,亦不清楚的胡朋友可以自己搜索一下便可以得到大量的答案 为了体验linq究竟能带给我们什么体验,我们直接从代码入手: string[] words = n ...

  3. Microsoft SqlServer2008技术内幕:T-Sql语言基础-读书笔记-单表查询SELECT语句元素

    1.select语句逻辑处理顺序: FORM WHERE GROUP BY HAVING SELECT OVER DISTINCT TOP ORDER BY 总结: 2.FORM子句的表名称应该带上数 ...

  4. 《Java编程思想》读书笔记-赋值操作符

    在最底层,Java中的数据是通过使用操作符来操作的.接下来我们逐一认识一些操作符. 怎么运用操作符 操作符接受一个或多个参数,并生成一个新值. 基本操作符 赋值操作符 符号:= 作用:取右边的值,把它 ...

  5. 【Linq】标准查询操作符

    A.1 聚合 聚合操作符(见表A-1),所有的结果只有一个值而不是一个序列. Average 和 Sum 针对数值 (任何内置数值类型)序列或使用委托从元素值转换为内置数值类型的元素序列. Min 和 ...

  6. .NET 3.5(5) - LINQ查询操作符之Select、Where、OrderBy、OrderByDescending

    .NET 3.5(5) - LINQ查询操作符之Select.Where.OrderBy.OrderByDescending 介绍    ·Select - Select选择:延迟    ·Where ...

  7. [读书笔记]C#学习笔记六: C#3.0Lambda表达式及Linq解析

    前言 最早使用到Lambda表达式是因为一个需求:如果一个数组是:int[] s = new int[]{1,3,5,9,14,16,22};例如只想要这个数组中小于15的元素然后重新组装成一个数组或 ...

  8. LINQ标准查询操作符(一)——select、SelectMany、Where、OrderBy、OrderByDescending、ThenBy、ThenByDescending和Reverse

    一.投影操作符 1. Select Select操作符对单个序列或集合中的值进行投影.下面的示例中使用select从序列中返回Employee表的所有列: //查询语法 var query = fro ...

  9. 读书笔记汇总 - SQL必知必会(第4版)

    本系列记录并分享学习SQL的过程,主要内容为SQL的基础概念及练习过程. 书目信息 中文名:<SQL必知必会(第4版)> 英文名:<Sams Teach Yourself SQL i ...

随机推荐

  1. NET基础课--对象的筛选和排序(NET之美)

    1.数据量不大的时候取出数据缓存于服务器,然后排序,筛选等基于缓存进行以提高效率. 排序或筛选的方法是使用集合类型提供的,如List<T>.sort()  List<T>.Fi ...

  2. StackOverflow程序员推荐:每个程序员都应读的30本书

    “如果能时光倒流,回到过去,作为一个开发人员,你可以告诉自己在职业生涯初期应该读一本,你会选择哪本书呢?我希望这个书单列表内容丰富,可以涵盖很多东西.” 很多程序员响应,他们在推荐时也写下自己的评语. ...

  3. android——仿网易今日头条等自定义频道listview 或者grideview等item上移到另一个view中

    转载请注明出处: www.cnblogs.com/shoneworn 我这里只是简单的用了两个listview来实现的,先上效果图.比较粗糙.预留了自定义的空间. 思路: 从上图应该可以看的出来.就是 ...

  4. [转]CSS vertical-align属性详解 作者:黄映焜

      CSS vertical-align属性详解 posted @ 2014-08-26 17:44 黄映焜   前言:关于vertical-align属性. 实践出真知. 垂直居中. 第二种用法. ...

  5. 【SQL语句】 - Ctrl+3 查询表属性的存储过程 [sp_select_talberowName]

    /**-- ============================================= Author: xftCteateDate: 2013-10-11Description:查看表 ...

  6. java合并list

    import java.util.ArrayList; import java.util.List;   import com.google.common.collect.Lists;   priva ...

  7. c++ 指针的简单用法

    对于指针,其实只需要明白几点就可以. 1.指针,是一个数值为地址的变量,这里尤其注意,指针变量的值是地址!就是例如40002这种像门牌号的地址值,其实就是内存中的一个编号. 2.&,该符号的意 ...

  8. Tango_with_django_17笔记

    1. 在update Category tabole with SlugField中,起因是url会将空格自动转换成%20,为了把url变得美观,易读,可以用slugify,它可以把空格替换为连字符( ...

  9. 通过js引入当前所需要的js,css等

    在我们web前端页面中经常会用到许多外部的js,css文件,那么问题来了,怎样才能一次性引入? 通过js便可实现 走码: //创建一个init.js文件 var jsUrls = "js/j ...

  10. 关于hibernate非主键多对一关联

    一直以来,用hibernate做多对一时,关联的都是主键,今天,同事设计的表,关联的却不是主键,这下麻烦了,hibernate的many-to-one默认关联的都是主键,原来,hibernate提供了 ...