基础概念express
LINQ是微软推出的一项具备突破性的新特性——语言集成查询(Language Integrate Query),他在对象和数据间创建了一种对应关系,可使用访问内存对象的方式查询数据集合数组
在.NET类库中,LINQ相关类库都在System.Linq命名空间下,对于目前程序须要用到的是LINQ to Object,数据源为实现了接口IEumerable<T>或IQueryable<T>的内存数据集合,对于本程序也就是List<T>集合函数
LINQ查询的目的是从制定的数据源中查询知足符合特定条件的数据元素,而且根据须要对这些查询的元素进行排序、链接等操做,因此LINQ查询主要包括以下几个元素学习
数据源:表示LINQ将从哪里查找数据,一般是一个或多个数据集,数据集包含一系列元素,是一个类型为IEumerable<T>或IQueryable<T>的对象,能够对它进行枚举,遍历每个元素,元素能够是任意数据类型spa
目标数据:数据源中的数据并不都是查询所须要的结果,目标数据用来指定具体想要什么数据,在LINQ中,它定义了查询结果数据集中元素的具体类型对象
筛选条件:筛选条件定义了对数据源中元素的过滤条件,只有知足条件的原素材做为查询结果返回,帅选条件能够是简单的逻辑表达式表示,也能够用具备复杂逻辑的函数来表示排序
附加操做:表示一些其余的操做,好比排序、计算查询结果的最值和求和、对查询结果进行分组等接口
数据源和目标数据是必备元素,筛选和附加操做是可选元素ip
查询表达式内存
查询表达式是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表达式中只有一个输入参数时能够不用括号,不然括号是必须的,两个及以上参数用逗号隔离,没有参数时使用空括号表示
使用关键字对应方法进行一系列操做