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 ...
随机推荐
- im4java包处理图片
使用方法:首先要安装ImageMagick这个工具,安装好这个工具后,再下载im4java包放到项目lib目录里就行了.package com.stu.util; import java.io.IOE ...
- 从源码(编译)安装golang
从源码安装golang 通常情况下,安装go只需要在官网(https://golang.org/dl/)下载适合系统的二进制发布包,按照安装说明进行安装即可. 对于Linux, Mac OS X和Fr ...
- 全国交通咨询系统 by C++ on Linux
信息存储 利用邻接表存储城市信息与线路信息,比邻接矩阵更加高效. 主要数据结构 I)Time,规范时间的输入输出格式 II)VNode,头结点,用于建立顶点表,存储城市信息 III)ArcNode,表 ...
- nginx+apache前后台搭配使用
nginx apache都是web服务器 但是nginx更轻型对静态处理强大,而且nginx也是反向代理服务器,可以作转发 apache比较重型,非常稳定,处理动态WEB程序非常好,但是对静态处理就比 ...
- Spark 核心概念 RDD 详解
RDD全称叫做弹性分布式数据集(Resilient Distributed Datasets),它是一种分布式的内存抽象,表示一个只读的记录分区的集合,它只能通过其他RDD转换而创建,为此,RDD支持 ...
- jq 中each的用法 (share)
each的使用方法 在jQuery里有一个each方法,用起来非常的爽,不用再像原来那样写for循环,jQuery源码里自己也有很多用到each方法.其实jQuery里的each方法是通过js里的ca ...
- SQLServer 索引总结
测试案例: SET STATISTICS IO ON SET STATISTICS TIME ON SET STATISTICS PROFILE ON SELECT count(A.CarrierT ...
- [Micropython]发光二极管制作炫彩跑马灯
先甩锅 做完后才发现最后一个灯坏了,就坏了一个灯也不好意思去找淘宝店家,大家视频凑合着看把.不过并不影响实验效果.因为这个发光二极管白天不是很明显 晚上炫彩效果就能出来了.本次实验用的是8个灯珠 ...
- 【Python3之正则re】
一.正则re 1.正则表达式定义 正则就是用一些具有特殊含义的符号组合到一起(称为正则表达式)来描述字符或者字符串的方法.或者说:正则就是用来描述一类事物的规则.(在Python中)它内嵌在Pytho ...
- chrome调试工具高级不完整使用指南(优化篇)
上一篇文章我们说了chrome调试工具的一些比较基础功能的用法,接下来我们要在这一篇文章中说一说,其他一些chrome调试工具的使用方法 2.1.5 Network模块 在netWork模块中,大致上 ...