LINQ学习笔记

基础概念

LINQ是微软推出的一项具有突破性的新特性——语言集成查询(Language Integrate Query),他在对象和数据间建立了一种对应关系,可以使用访问内存对象的方式查询数据集合

在.NET类库中,LINQ相关类库都在System.Linq命名空间下,对于目前程序需要用到的是LINQ to Object,数据源为实现了接口IEumerable<T>或IQueryable<T>的内存数据集合,对于本程序也就是List<T>集合

LINQ查询的目的是从制定的数据源中查询满足符合特定条件的数据元素,并且根据需要对这些查询的元素进行排序、连接等操作,所以LINQ查询主要包括如下几个元素

数据源:表示LINQ将从哪里查找数据,通常是一个或多个数据集,数据集包含一系列元素,是一个类型为IEumerable<T>或IQueryable<T>的对象,可以对它进行枚举,遍历每一个元素,元素可以是任意数据类型

目标数据:数据源中的数据并不都是查询所需要的结果,目标数据用来指定具体想要什么数据,在LINQ中,它定义了查询结果数据集中元素的具体类型

筛选条件:筛选条件定义了对数据源中元素的过滤条件,只有满足条件的原素材作为查询结果返回,帅选条件可以是简单的逻辑表达式表示,也可以用具有复杂逻辑的函数来表示

附加操作:表示一些其他的操作,比如排序、计算查询结果的最值和求和、对查询结果进行分组等

数据源和目标数据是必备元素,筛选和附加操作是可选元素

查询表达式

查询表达式是LINQ查询的基础,也是最常用的编写LINQ查询的方法。有查询关键字和对应的操作数组成的表达式整体

查询表达关键字

关键字

功能

from

指定要查找的数据源及范围变量,多个from字句则表示从多个数据源查找数据

select

指定查询要返回的目标数据,可以指定任何类型,甚至是匿名类型

where

指定元素的筛选条件,多个where子句则表示并列条件,必须全部都满足才能入选

orderby

指定元素的排序字段和排序方式,当有多个排序字段时,由字段顺序确定主次关系,可以指定升序和降序两种排序方式

group

指定元素的分组字段

join

指定多个数据源的关联方式

from

每个LINQ查询都是从from子句开始,其一般包括以下两个功能

制定查询将采用数据源

定义一个本地变量,表示数据源中单个元素

格式为from localVar in dataSource,一般不为localVar元素指定数据类型,由编译器自动分配类型

select

LINQ查询表达式必须以select或者group子句结束,格式如下

select element

element参数指定查询结果中元素的类型及初始化方式

要选择的目标数据不仅可以为数据源中的元素,还可以是该元素的不同操作结果,包括属性、方法和运算等

可以使用匿名类型,进一步学习

where

格式如下

where expression

expression为一个逻辑表达式,可以使用&&和||指定多个条件之间的逻辑运算关系

orderby

格式如下

orderby element [sortType]

默认是ascending

可以同时指定多个排序元素,也可为每个排序元素制定独立的排序方式

 group

实现对查询结果的分组操作,常用格式如下

group element by key  

key表示分组条件,group子句返回类型为IGrouping< Tkey,TElement>的查询结果,可以看作一个内部嵌套List列表的Hashtable

如果需要对分组的结果进行排序,再次查询等操作,需要使用into关键字将Group的查询结果保存到一个临时变量,其格式为

group element by key into tmpGrp

join

通过join子句联接操作,可以将来自不同源序列,并且在对象模型中没有直接联系的元素相关联,唯一的要求是每个源中需要共享某个可以进行比较,以判断是否相等的值

可以实现三种联接:内部联接、分组联接、左右联接

内部联接

格式如下

join element in dataSource on exp1 equals exp2

exp1和exp2表示两个表达式,它们具有相同的数据类型

分组联接

join element in dataSource on exp1 equals exp2 into grpName

into表示将这些数据分组并保存到grpName中

左外部联接

LINQ查询方法

IEumerable<T>接口

主要方法有

数值运算:Sum,Average,Max,Min

元素数量Count,LongCount

取值:First,Last,ElementAt

提取子集:Skip,SkipWhile,Take,TakeWhile

集合操作:ReverseAll,Concat,Except,Intersect,Union,Distinct,SequenceEqual

其他:Any,Contains,ToArray,ToList…

Lambda表达式

基本格式

(input parameters)=>expression

parameters是一个参数列表,在Lambda表达式中只有一个输入参数时可以不用括号,否则括号是必须的,两个及以上参数用逗号隔离,没有参数时使用空括号表示

使用关键字对应方法进行一系列操作

posted @ 2017-04-09 20:39  依然传奇  阅读(334)  评论(0编辑  收藏  举报