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 ...
随机推荐
- CPP--正码,反码,补码~附整数溢出的探讨
之前说到了long的争议(http://www.cnblogs.com/dotnetcrazy/p/8059210.html),这边就不用long来举例了,用int吧 可以看一下这篇文章(http:/ ...
- xlwt 官网的例子
from time import * from xlwt.Workbook import * from xlwt.Style import * style = XFStyle() wb = Workb ...
- Debian安装fail2ban来防止扫描
vps的root密码不要设置的太简单,这样很容易被攻破,你可以安装如下软件来降低vps被攻破的机会. 输入如下命令: apt-get install fail2ban 提示如下表示安装完成: root ...
- angular4.0项目文件解读
这篇文章我觉得是很有用的,便于我们对ng项目的理解,同时在配置项目时,也能够很快的定位到相应文件. 摘录的别人的文章,首先感谢那个路人兄弟,下面就开始学习吧. File 文件 Purpose 用途 e ...
- 【练习】Html
要求: 用html相关知识实现以下网页 <!DOCTYPE html> <html lang="en"> <head> <meta cha ...
- 2018年手机应用UI设计趋势预测
用户需求瞬息万变,而手机软件UI设计为适应变化的用户需求,也相应的发生着变化.但是,这并不意味着用户需求和UI设计趋势就是无迹可寻的.事实上,根据前几年的手机app界面设计变化的特点,尤其是2017年 ...
- Centos6.4三种更改hostname的方法之间的对比
首先,利用hostname命令查看一下当前主机的主机名,在终端输入hostname,会发现显示的是完整的主机名称(主机名.域名),其中主机名与进入终端后:登录名@主机名,显示的一致,如下图所示: 其次 ...
- 自学Aruba1.4-WLAN厂家魔力象限
点击返回:自学Aruba之路 1.4 自学Aruba1.4-WLAN厂家魔力象限 以下为2017<有线和无线局域网接入基础设施的魔力象限>报告: Aruba.cisco为无线领域 ...
- C#中yield的使用
yield 关键字向编译器指示它所在的方法是迭代器块.编译器生成一个类来实现迭代器块中表示的行为.在迭代器块中,yield 关键字与 return 关键字结合使用,向枚举器对象提供值.这是一个返回值, ...
- 读汤姆大叔《JavaScript变量对象》笔记
一段简单的JavaScript代码思考 先看一段简单的代码,打印结果是??为什么why?? 从上述打印结果不难看出,在打印基本变量num.函数表达式fn.函数声明fun时,就已经知道变量num.函数表 ...