Linq学习(主要参考linq之路)----2LINQ方法语法
方法语法:Fluent Syntax
方法语法是非常灵活和重要的。我们这里讲描述使用连接查询运算符的方式来创建复杂的子查询,方法语法的本质是通过扩展方法和Lambda表达式来创建查询。
eg1:
static void Main(string[] args)
{
string[] names={"Tom","Jerry","Harry"};
IEnumerable<string> query=names
.Where(n=>n.Contains("a"))
.OrderBy(n=>n.Length)
.Select(n=>n.ToUpper()); foreach(string name in query)
Console.WriteLine(name); }
当链接使用查询运算符时,一个运算符的输出sequence会成为下一个运算符输入的sequence,其结果形成了一个sequence的传输链,如图:

上例中,Where产生一个经过过滤的sequence;OrderBy生成输入sequence的排序版本;Select得到的序列中的每个元素都经过了给定lambda表达式的转换。
其中Where,OrderBy,Select这几个扩展方法的签名(其中predicate/Func/Action参考 predicate/Func/Action泛型委托 ):
public static IEnumerable<TSource> Where<TSource>
(this IEnumerable<TSource> source,Func<TSource,bool> predicate) public static IEnumerable<TSource> OrderBy<TSource,TKey>
(this IEnumerable<TSource> source,Func<TSource,Key>keySelector) public static IEnumerable<TResult> Select<TSource,TResult>
(this IEnumerable<TSource> source,Func<TSource,TResult> selector)
其他的查询运算符:
并不是所有的查询运算符都返回一个sequence.
元素运算符会从输入sequence中获取单个元素,如:First,Last和ElementAt;
int[] numbers={,,,,};
int firstNumber=numbers.First();
int lastNumber=numbers.Last();
int secondNumber=numbers.ElementAt();
int lowestNumber=numbers.OrderBy(n=>n).First();
集合(aggregation)运算符返回一个标量值,通常是数值类型:
int count=numbers.Count();
int min=numbers.Min();
判断运算符返回一个bool值:
bool hasTheNumberNine=numbers.Contains();
bool hasElements=numbers.Any();
bool hasAnOddElement=numbers.any(n=>(n%)==);
因为这些运算符并不是返回一个sequence,所以我们不能再这些运算符之后链接其他运算符。也就是说,他们一般出现在查询的最后面。
还有的接受两个输入sequence,比如Concat把一个sequence添加到另外一个seqence后面;Union与Concat类似,但是会去除相同的元素:
int[] seq1={,,,};
int[] seq2={,,};
IEnumerable<int> concat=seq1.Concat(seq2); //{1,2,2,3,3,4,5}
IEnumerable<int> union=seq1.Union(seq2); //{1,2,3,4,5}
Linq学习(主要参考linq之路)----2LINQ方法语法的更多相关文章
- Linq学习之旅——LINQ查询表达式
1. 概述 2. from子句 3. where子句 4. select子句 5. group子句 6. into子句 7. 排序子句 8. let子句 9. join子句 10. 小结 1. 概述 ...
- Linq学习<五> 运用linq查询Xml
这节将学习如何用 linq查询xml 一.我们先看看在xml中我们怎么操作 public void xmlWayToQueryXmlFile() { XmlDocument xmldoc = new ...
- Linq学习(一)-初涉Linq
一.何谓LINQ LINQ:Language Integrated Query语言集成查询,其本质是对ADO.NET结果集通过反射连同泛型特性转换成对象集,实现OR模型的转换 二.优点与缺点 优点:封 ...
- LINQ学习笔记——(1)添加扩展方法
目的: 对已存在类型的行为进行扩展 注意事项: 扩展方法是一种特殊的静态方法 扩展方法必须在静态类中定义 扩展方法的优先级低于同名的类方法 扩展方法只在特定的命名空间内有效 ...
- C# LINQ学习笔记一:走进LINQ的世界
本笔记摘抄自:https://www.cnblogs.com/liqingwen/p/5832322.html,记录一下学习过程以备后续查用. LINQ 简介: 语言集成查询(LINQ)是Vi ...
- .NET LINQ查询语法与方法语法
LINQ 查询语法与方法语法 通过使用 C# 3.0 中引入的声明性查询语法,介绍性 LINQ 文档中的多数查询都被编写为查询表达式. 但是,.NET 公共语言运行时 (CLR) 本身并不具 ...
- C#3.0新增功能09 LINQ 基础07 LINQ 中的查询语法和方法语法
连载目录 [已更新最新开发文章,点击查看详细] 介绍性的语言集成查询 (LINQ) 文档中的大多数查询是使用 LINQ 声明性查询语法编写的.但是在编译代码时,查询语法必须转换为针对 .NET ...
- LINQ之路 4:LINQ方法语法
书写LINQ查询时又两种语法可供选择:方法语法(Fluent Syntax)和查询语法(Query Expression). LINQ方法语法是非常灵活和重要的,我们在这里将描述使用链接查询运算符的方 ...
- LINQ 学习笔记(1)
学习资源参考 : http://www.cnblogs.com/lifepoem/archive/2011/12/16/2288017.html 常用方法是 Where, OrderBy, Selec ...
随机推荐
- UNIX域协议(命名套接字)
这里主要介绍命名UNIX域套接字 1.什么是UNIX域套接字Unix域协议并不是一个实际的协议族,而是在单个主机上执行客户/服务通信的一种方式.是进程间通信(IPC)的一种方式.它提供了两类套接字:字 ...
- ExpandableListView的完美实现,JSON数据源,右边自定义图片
转载请标明出处: http://www.cnblogs.com/dingxiansen/p/8194669.html 本文出自:丁先森-博客园 最近在项目中要使用ExpandableListView来 ...
- Rstudio( bioconductor)下载太慢,用国内镜像
在Rstudio中,下载软件install.packages()和 bioconductor软件下载命令 source("http://bioconductor.org/biocLite.R ...
- Android 内存暴减的秘密?!
作者:杨超,腾讯移动客户端开发 工程师 商业转载请联系腾讯WeTest获得授权,非商业转载请注明出处. WeTest 导读 在我这样减少了26.5M Java内存! 一文中内存优化一期已经告一段落, ...
- 【http转https】其之一:腾讯云 DV SSL证书申请实验
文:铁乐猫 2016年1月 前言 大概2017年12月28日左右公司提出以后需要将公司网站由http提升到https级别,以便谷歌和火狐浏览器将之认定为安全网站. 主要是出于客户.用户那边用火狐或谷歌 ...
- HMM Viterbi算法 详解
HMM:隐式马尔可夫链 HMM的典型介绍就是这个模型是一个五元组: 观测序列(observations):实际观测到的现象序列 隐含状态(states):所有的可能的隐含状态 初始概率(start ...
- Django内置Admin
Django内置的Admin是对于model中对应的数据表进行增删改查提供的组件,使用方式有: 依赖APP: django.contrib.auth django.contrib.contenttyp ...
- robotframework的学习笔记(十五)----robotframework标准库Collections
Collections库是RobotFramework用来处理列表和字典的库,官方文档是这样介绍的:A test library providing keywords for handling lis ...
- MySQL中各种数据类型的长度及在开发中如何选择
接触MySQL这个数据库大概快要两年了,不过由于没有特别深入系统的去学习,大多也是停留在一知半解的状态.今天在工作中刚好碰到了表设计的问题,顺便写篇博客,把MySQL中数据类型和字段类型选择这方面给弄 ...
- Wechat 微信端正确播放audio、video的姿势
在开发微信项目时,有在项目中播放音频(audio)和视频(video)的需求: 在开发中,我们会遇到的问题 audio.video在Android和IOS系统上的兼容性: video播放完成后,跳出浏 ...