使用LINQ处理数据Word下载.docx
- 文档编号:16175572
- 上传时间:2022-11-21
- 格式:DOCX
- 页数:29
- 大小:27.37KB
使用LINQ处理数据Word下载.docx
《使用LINQ处理数据Word下载.docx》由会员分享,可在线阅读,更多相关《使用LINQ处理数据Word下载.docx(29页珍藏版)》请在冰豆网上搜索。
varquery0=fromvinsources
wherev<
3
selectv;
13.2LINQ查询子句
LINQ查询表达式由一组类似于SQL或XQuery的声明性语法编写的子句组成。
LINQ查询表达式包含8个基本子句,具体说明如下所述。
*from子句:
指定查询表达式的数据源和范围变量。
*select子句:
指定筛选元素的逻辑条件。
一般由逻辑运算符组成。
*where子句:
指定查询结果的表现形式。
*group子句:
对查询结果进行分组。
*orderby子句:
对查询结果进行排序。
*join子句:
用来连接多个查询操作的数据源。
*let子句:
可以用来引入用于存储子表达式查询结果的范围变量。
*into子句:
提供一个临时标识符,使用该标识可以允许对join、group或select子句结果的引用。
13.2.1from子句
from子句和SQL语句中的“FROM子句”比较相似,它可以指定查询的数据源(也包括子查询的数据源)和范围变量。
其中,范围变量用来表示数据源序列中的每一个元素。
?
注意:
LINQ查询表达式必须包含from子句,且以from子句开头。
【示例13-2】创建了一个LINQ查询表达式,并保存为query1。
该表达式从sources数组中查询小于2的元素。
s为范围变量。
sources为数据源,它为整型数组,并包含10个值。
varquery1=fromsinsources
wheres<
2
selects;
示例13-2的查询结果如表13.1所示。
表13.1示例13-2的查询结果表
数据源
查询表达式
查询结果
sources(包含9个元素,分别为0、1、2、3、4、5、6、7、8、9)
fromsinsources
wheres<
selects;
query1(包含两个元素,分别为0和1)
【示例13-3】创建了一个LINQ查询表达式,并保存为query2。
该表达式从strs字符串中查询a字符到g之间的字符。
c为范围变量。
strs为数据源,它为一个字符串,值为“Thisisastring.”。
stringstrs="
Thisisastring."
;
varquery2=fromcinstrs
wherec<
='
g'
&
&
c>
a'
selectc;
示例13-3的查询结果如表13.2所示。
表13.2示例13-3的查询结果表
strs,值为“Thisisastring.”
fromcinstrs
wherec<
selectc;
query2(包含两个元素,分别为“a”和“g”)
from子句指定数据源的类型必须为IEnumerable、IEnumerable<
或前两者的派生类型。
根据from子句的数量和组合方式,可以把LINQ查询表达式分为以下3种类型。
*单个from子句查询表达式。
*多个from子句查询表达式。
*复合from子句查询表达式。
1.单个from子句查询
若LINQ查询表达式只包含一个from子句,则称该查询为单个from子句查询。
一般情况下,单个from子句查询往往使用一个数据源。
【示例13-4】创建了一个LINQ查询表达式,并保存为query3。
该表达式从strs字符串中查询a字符到c之间的字符。
varquery3=fromcinstrs
c'
示例13-4的查询结果如表13.3所示。
表13.3示例13-4的查询结果表
query3(包含1个元素,为“a”)
2.多个from子句查询
若LINQ查询表达式包含多个from子句,则称该查询为多个from子句查询。
一般情况下,包含多个from子句的查询往往使用多个数据源。
【示例13-5】创建了一个LINQ查询表达式,并保存为query4。
该表达式从sourcesa数组中查询小于2的元素,并从sourcesb数组中查询大于100的元素,并计算两个查询的和。
int[]sourcesa={0,1,2,3,4,5,6,7,8,9};
int[]sourcesb={100,200,300,400,2008};
varquery4=fromsinsourcesa
wheres<
fromiinsourcesb
wherei>
100
selects+i;
示例13-5的查询结果如表13.4所示。
表13.4示例13-5的查询结果表
sourcesa(包含9个元素,分别为0、1、2、3、4、5、6、7、8、9)
sourcesb(包括5个元素,分别为100、200、300、400、2008)
fromsinsourcesa
fromiinsourcesb
wherei>
selects+i;
query4(包含8个元素,分别为200、300、400、2008、201、301、401、2009)
3.复合from子句查询
在一些情况下,数据源的元素也是一个数据源(被称为子数据源)。
如果要查询子数据源中的元素,则需要使用复合from子句。
【示例13-6】创建了一个LINQ查询表达式,并保存为query5。
该表达式首先从sources字符数组中查询包含string的字符串(使用“fromsinsources”子句),然后从该字符串中查询a字符到g之间的字符(使用“fromcins”子句)。
最后,输出查询结果的字符及其所在的字符串。
string[]sources={"
"
Thisisabook."
};
varquery5=fromsinsources
fromcins
wheres.IndexOf("
string"
)>
-1&
c<
selectc+"
:
"
+s;
示例13-6的查询结果如表13.5所示。
表13.5示例13-6的查询结果表
sources(包含2个元素,分别为“Thisisastring.”和“Thisisabook.”)
fromcins
wheres.IndexOf("
selectc+"
query5(包含2个元素,分别为“a:
Thisisastring.”和“g:
Thisisastring.”)
13.2.2where子句
where子句和SQL语句中的“WHERE子句”比较相似,它指定查询表达式的筛选元素满足的逻辑条件。
where子句一般由逻辑运算符(如逻辑“与”、逻辑“或”)组成。
一个查询表达式可以包含1个或多个where子句,甚至不包含where子句。
每一个where子句可以包含1个或多个布尔条件表达式。
对LINQ查询表达式而言,where子句不是必须的。
如果LINQ查询表达式包含了where子句,那么where子句不能为LINQ查询表达式的第一个子句或最后一个子句。
【示例13-7】创建了一个LINQ查询表达式,并保存为query6。
该表达式从sources数组中查询大于3的元素。
varquery6=fromsinsources
wheres>
示例13-7的查询结果如表13.6所示。
表13.6示例13-7的查询结果表
fromsinsources
query6(包含6个元素,分别为4、5、6、7、8、9)
【示例13-8】创建了一个LINQ查询表达式,并保存为query7。
该表达式从sources数组中查询大于3且小于8的元素。
varquery7=fromsinsources
3&
s<
8
示例13-8的查询结果如表13.7所示。
表13.7示例13-8的查询结果表
wheres>
<
query7(包含4个元素,分别为4、5、6、7)
13.2.3select子句
select子句和SQL语句中的“SELECT子句”比较相似,它可以指定查询结果的类型和表现形式。
一个LINQ查询表达式可以不包含select子句,也可以包含1个select子句。
LINQ查询表达式要么以select子句结束,要么以group子句结束。
【示例13-9】创建了一个LINQ查询表达式,并保存为query8。
该表达式从sources数组中查询大于7的元素。
varquery8=fromsinsources
7
示例13-9的查询结果如表13.8所示。
表13.8示例13-9的查询结果表
query8(包含2个元素,分别为8和9)
【示例13-10】创建了一个LINQ查询表达式,并保存为query9。
该表达式从sources数组中查询小于3的元素,并返回查询结果的元素与100的乘积。
varquery9=fromsinsources
selects*100;
示例13-10的查询结果如表13.9所示。
表13.9示例13-10的查询结果表
selects*100;
query8(包含3个元素,分别为0、100、200)
【示例13-11】创建了一个LINQ查询表达式,并保存为query10。
该表达式从sources数组中查询小于3的元素,并返回新对象。
其中,新对象的ID属性值为查询结果的元素值;
Username属性的值则由“User”字符串和查询结果的元素的值组成。
varquery10=fromsinsources
selectnew
{
ID=s,
Username="
User"
+s.ToString()
};
示例13-11的查询结果如表13.10所示。
表13.10示例13-11的查询结果表
selectnewUserInfo
{
ID=s,
Username="
query10(包含3个元素,元素的ID属性的值分别为0、1、2)
13.2.4group子句
group子句可以对查询的结果进行分组,并返回元素类型为IGrouping<
TKey,TElement>
的对象序列。
其中,TKey参数指定元素的键的类型,TElement参数指定元素的值的类型。
IGrouping<
和IEnumerable<
非常相似,在此不做详细介绍。
【示例13-12】创建了一个LINQ查询表达式,并保存为query11。
该表达式从sources数组中查询元素,并按照元素的奇偶性进行分组。
varquery11=fromsinsources
groupsbys%2==0;
【示例13-13】使用2个foreach语句输出了query11查询的结果。
第1个foreach语句枚举query11查询结果中的所有的组,第2个foreach语句枚举每一个组中的每一个元素。
foreach(varqinquery11)
foreach(varsubqinq)
Response.Write(subq.ToString()+"
);
}
Response.Write("
<
br/>
}
13.2.5orderby子句
orderby子句可以按照关键字(或键)对查询结果进行排序,其中,排序方式可以为“升序”或“降序”,排序的关键字(或键)可以为一个或多个。
order子句的默认排序方式为“升序”。
【示例13-14】创建了一个LINQ查询表达式,并保存为query12。
该表达式从sources数组中查询大于7的元素,并按照元素进行升序排序。
varquery12=fromsinsources
orderbys
示例13-14的查询结果如表13.11所示。
表13.11示例13-14的查询结果表
orderbys
query12(包含2个元素,分别为8和9)
【示例13-15】创建了一个LINQ查询表达式,并保存为query13。
其中,每一个分组都按照元素的值进行倒序排序。
varquery13=fromsinsources
orderbysdescending
13.2.6into子句
into子句可以创建一个临时标识符,使用该标识符可以存储group、join或select子句查询结果。
【示例13-16】创建了一个LINQ查询表达式,并保存为query14。
该查询表达式的具体操作说明如下所述。
*从sources数组中查询元素。
*按照元素的奇偶性进行分组。
*每一个分组中的元素都按照元素的值进行倒序排序。
*将每一个查询结果临时保存为g变量。
*使用where子句判断查询g变量中的元素数量是否大于5,如果大于5,则选择该组。
int[]sources={0,1,2,3,4,5,6,7,8,9,10};
varquery14=fromsinsources
groupsbys%2==0intog
whereg.Count()>
5
selectg;
示例13-16的查询结果如表13.12所示。
表13.12示例13-16的查询结果表
sources(包含10个元素,分别为0、1、2、3、4、5、6、7、8、9、10)
orderbysdescending
groupsbys%2==0intog
whereg.Count()>
selectg;
query14(包含1个元素,该元素为一个组,组内包含6个元素,分别为10、8、6、4、2、0)
13.2.7let子句
let子句可以创建一个范围变量,使用该变量可以保存表达式中的中间结果。
let子句创建的范围变量的值只能通过初始化操作进行赋值。
范围变量的值一旦被初始化,将不能再被改变。
【示例13-17】创建了一个LINQ查询表达式,并保存为query15。
*使用let语句创建范围变量m,它的值为元素除以2的余数。
*查询元素的值大于3,且m变量的值等于1的元素。
varquery15=fromsinsources
letm=s%2
m==1
示例13-17的查询结果如表13.13所示。
表13.13示例13-17的查询结果表
letm=s%2
query15(包含3个元素,分别为5、7和9)
13.2.8join子句
join子句可以设置两个或多个存在相关属性或值的数据源之间的关系。
join子句可以为数据源之间建立以下3种联接关系。
*内部联接,和SQL语句中的“INNERJOIN子句”比较相似,两个数据源都必须存在相同的值,即两个数据源都必须存在满足联接关系的元素。
*分组联接,即为含有into子句的join子句。
*左外部联接,和SQL语句中的“INNERLEFT子句”比较相似。
【示例13-18】创建两个类:
UserInfo和Role-Info。
UserInfo类描述用户的信息,包含3个属性:
ID、RoleID和Username。
RoleInfo类描述角色的信息,包含2个属性:
ID和RoleName。
UserInfo和RoleInfo类的类关系图如图13.1所示。
UserInfo类的RoleID属性的值是引用于RoleInfo类的ID属性。
因此,UserInfo类的RoleID属性和RoleInfo类的ID属性将建立联接关系。
//
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 使用 LINQ 处理 数据