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正好可以很聪明的做到将两个序列分开后组成一个新的序列返回给我们,而这也正是我们需要的结果.
linq读书笔记3-操作符之select与selectmany的更多相关文章
- linq读书笔记2-查询内存中的对象
上次我们说到了linq对数组内容的检索,自.net2.0以后,泛型成了很常见的一种应用技术,linq对泛型的检索也提供了完善的支持 如对list类型的支持,范例如下: class Program ...
- linq读书笔记1-linq 初步
至于linq是什么之类的已经有过太多的文章介绍,亦不清楚的胡朋友可以自己搜索一下便可以得到大量的答案 为了体验linq究竟能带给我们什么体验,我们直接从代码入手: string[] words = n ...
- Microsoft SqlServer2008技术内幕:T-Sql语言基础-读书笔记-单表查询SELECT语句元素
1.select语句逻辑处理顺序: FORM WHERE GROUP BY HAVING SELECT OVER DISTINCT TOP ORDER BY 总结: 2.FORM子句的表名称应该带上数 ...
- 《Java编程思想》读书笔记-赋值操作符
在最底层,Java中的数据是通过使用操作符来操作的.接下来我们逐一认识一些操作符. 怎么运用操作符 操作符接受一个或多个参数,并生成一个新值. 基本操作符 赋值操作符 符号:= 作用:取右边的值,把它 ...
- 【Linq】标准查询操作符
A.1 聚合 聚合操作符(见表A-1),所有的结果只有一个值而不是一个序列. Average 和 Sum 针对数值 (任何内置数值类型)序列或使用委托从元素值转换为内置数值类型的元素序列. Min 和 ...
- .NET 3.5(5) - LINQ查询操作符之Select、Where、OrderBy、OrderByDescending
.NET 3.5(5) - LINQ查询操作符之Select.Where.OrderBy.OrderByDescending 介绍 ·Select - Select选择:延迟 ·Where ...
- [读书笔记]C#学习笔记六: C#3.0Lambda表达式及Linq解析
前言 最早使用到Lambda表达式是因为一个需求:如果一个数组是:int[] s = new int[]{1,3,5,9,14,16,22};例如只想要这个数组中小于15的元素然后重新组装成一个数组或 ...
- LINQ标准查询操作符(一)——select、SelectMany、Where、OrderBy、OrderByDescending、ThenBy、ThenByDescending和Reverse
一.投影操作符 1. Select Select操作符对单个序列或集合中的值进行投影.下面的示例中使用select从序列中返回Employee表的所有列: //查询语法 var query = fro ...
- 读书笔记汇总 - SQL必知必会(第4版)
本系列记录并分享学习SQL的过程,主要内容为SQL的基础概念及练习过程. 书目信息 中文名:<SQL必知必会(第4版)> 英文名:<Sams Teach Yourself SQL i ...
随机推荐
- BOM 窗体相关属性以及页面可见区域的获取方式
1 在IE Safari Oper Chrome 都提供了screenLeft和screenTop属性: screenLeft : 相对于屏幕左边的距离 screenTop : 相对于屏幕上边的距离 ...
- CSS3旋转图片效果收集
火狐中文网图片效果: [http://i.firefoxchina.cn/?www.firefoxchina.cn] .news-img-wrapper:hover img { transfo ...
- hbase权威指南学习笔记--过滤器
1.使用hbase是shell客户端进行过滤查询 scan 'testtable',{COLUMNS=>'colfam1:col-0',FILTER=>RowFilter.new(Comp ...
- 1.jdk、Tomcat、solr的安装和配置
1.jdk安装和配置 1)根据电脑类型,到官网下载相应的jdk版本 2)双击jdk-8u5-windows-x64.exe安装包,一直点下一步就可以了,注意记住jdk和jre的安装目录. 3)环境变量 ...
- linux 下执行.sh文件总是提示permission denied
linux 下执行.sh文件总是提示permission denied 如果你是root登陆的话(不是的话,切换到root用户,对*.sh赋可执行的权限) chmod 777 *.sh or ch ...
- Adapter常用的实现--BaseAdapter
BaseAdapter,通常用于被拓展.拓展BaseAdapter可以对个列表项进行最大限度的定制. 如下面的Badapter继承自BaseAdapter,重写以下四种方法. public clas ...
- oracle定时备份与删除N天前备份文件
oracle定时备份数据库,以及删除7天前备份的数据. 1.创建存放备份目录: mkdir /home/oracle/data_backup mkdir /home/oracle/log_backup ...
- iOS开发~视图(UIView)与控件(UIControl)
1.UIView类 1.什么是视图 看得见的都是视图 2.什么是控件 一种特殊的视图,都是UIControl的子类,不仅具有一定的显示外观,还能响应高级事件,与用户交互.严格意义上UILabel不是控 ...
- 两个string数组对应比较
最近做的array string类型对比.这个可能比较复杂,用的是linq 是请教别人的,我在这里记录一下 jquery 方法里面的数组 function arrtxt() { var arrt= [ ...
- regular expression 基本语法
正则检测网址: http://regexpal.isbadguy.com/ (不包含界定符) 或 http://tool.chinaz.com/regex unicode转换工具 : htt ...