LINQ(语言集成查询):是一种数据源检索数据的表达式,提供了一种跨数据源和数据格式的统一模型,实现查询,它使用C#等语言查询数据库相同的方式查询内存数据,在LINQ中,可以使用相同的编码模式来查询和转换XML文档、SQL数据库,ADO.NET数据集以及.NET集合中的数据,并支持LINQ查询的任何格式
LINQ编写从from关键字开始,结合使用where、select等关键字,实现各种条件查询
方法 | 说明 |
DefaultlfEmpty() | 将空集合转换为其他具有默认的单一实例集合 |
Empty() | 返回空集合 |
Range() | 生成包含数字序列的集合 |
Repeate() | 生成一个包含重复值的集合 |
//使用Range()生成1-100的数字,在使用LINQ查询出大于90的数字并显示
var list=Enumerable.Range(1,100);
var temp=list.where(a=>a>90);
foreach(var x in temp){
Console.WriteLine("符合条件的值:{0}",x);
}
所有生成操作的方法都是普通静态方法,并非扩展方法,除DefaultEmpty()方法在Queryable类中存在外,其他三个方法仅在Enumerable类中存在,生成操作方法的使用比较简单,可以配合投影、筛选等操作生成非常复杂的数据
限定操作符: 限定符运算返回一个Boolean的值,该值指示序列中是否有元素满足条件或是否所有元素都满足条件,执行限定符运算的标准查询见下表
方法 | 说明 |
Any() | 确定序列中是否有元素满足条件 |
All() | 确定是否序列中的所有元素都满足条件 |
Contains() | 确定序列中是否包含指定元素 |
Any()、All()、Contains()运算演示如下:
数据分区操作:LINQ中的数据分区是指在不重新排列元素的情况下,将输入序列划分为两个部分,然后返回其中一个部分,执行数据分区操作运算符
Skip() | 跳过序列中的指定个数的元素 |
SkipWhile() | 跳过指定序列中的元素,直到某个元素不满足条件为止 |
Take() | 提取序列中的指定个数的元素 |
TakeWhile() | 从序列中提取元素,直到某个元素不满足条件为止 |
使用Skip()方法和Take()方法对数据分区
在LINQ中,skip()方法和Take()方法通常组合用于对数据进行分页,常常用skip()方法跳过不需要的页面中的数据,使用Take()方法获取所需页面数据,如果PageSize为每页显示的记录数,pageIndex为请求的页码使用Skip((PageIndex-1)*PageSize).Take(PageSize)方法可以获得PageIndex页的数据,其中(PageIndex-1)*PageSize可以计算出在本页之前有多少条记录,使用Skip()方法跳过,然后使用Take(PageSize)方法获取当前页所需的PageSize条记录
注:在数据分区操作中容易理解错误的是TakeWhile()方法和SkipWhile()方法
TakeWhile()会取出元素,直到出现第一个不满足条件的元素为止,该元素之后的元素就算满足条件也不会取出来,SkipWhile()会跳过元素,直到出现第一个不满足条件的元素为止,该元素之后的元素即使满足条件也不会被跳过
//TakeWhile() 方法和SkipWhile()方法演示如下
TakeWhile()方法会提取元素,直到取到第一个长度不大于2的字符串“C#”为止,自此元素结束取值,后面的字符串即使长度都大于2,也不会被取出,SkipWhile()方法会跳过元素,直到第一个元素并非小于等于4的字符串“Lambda”时结束跳过方法,后面的字符串即使长度小于等于4,也不会被跳过
TakeWhile()方法和SkipWhile()方法运算都是从结合的开头开始操作,碰到第一个不满足条件的数据后运算终止,并非是对整个集合筛选
连接操作:将两个数据源联接是指将一个数据源中的对象与另外一个数据源中共享某个公共属性的对象关联起来,执行连接操作运算的标准查询运算符方法如下表
Join() | 根据键选择器方法联接两个序列并提取值对 |
GroupJoin() | 根据键选择器方法联接两个序列,并对每个元素的结果匹配项进行分组 |
Join()与GroupJoin()不同之处是Join()和SQL语法中的“inner join”是一致的,两次查询之后的结果集同时存在且相等,GroupJoin()和SQL语法中的“left Join”是一致的,无论第二次结果集中是否有满足条件的记录,均以第一次查询的结果集为主
在输出方式上,Join()和SQL语法中的“inner join”是一致的,输出的是一个扁平结合;GroupJoin方法会输出一个多层的集合
延迟执行:所有LINQ的查询操作都有3个步骤,获取数据源、创建查询、执行查询
创建一个int类型的数组和一个查询,要求取得大于的元素,并在投影中使用输出操作,最后对查询结果进行遍历输出,创建查询时,在投影操作中增加了输出代码且未对数据进行任何修改,按照对代码的直观了解,执行创建的查询的代码完毕,temp中应该保存一个int类型的集合并且将投影操作中的输出代码输出到控制台,然后使用foreach遍历temp集合,输出控制台