作者:李光辉
撰写时间:2019.5.6
在数据库操作时,查询功能是最基本的功能之一。通过使用查询语法,您甚至可以使用最少的代码对数据源执行复杂的筛选、排序和分组操作。
您可以使用相同的基本查询表达式模式来查询和转换数据库。
“查询”是指一组指令,这些指令描述要从一个或多个给定数据源检索的数据以及返回的数据应该使用的格式和组织形式。
查询不同于它所产生的结果。
什么是查询?它有什么用途?
“查询”是指一组指令,这些指令描述要从一个或多个给定数据源检索的数据以及返回的数据应该使用的格式和组织形式。
查询不同于它所产生的结果。
通常,源数据会在逻辑上组织为相同种类的元素序列。从应用程序的角度来看,原始源数据的具体类型和结构并不重要。
LINQ 最明显的“语言集成”部分是查询表达式,“查询表达式”是用查询语法表示的查询,
是一流的语言构造。查询表达式必须以 from 子句开头,并且必须以 select 或 group 子句结尾。 在第一个 from 子句和最后一个 select 或 group 子句之间,查询表达式可以包含一个或多个下列可选子句:where、orderby、join、let 甚至附加的 from 子句。 还可以使用 into 关键字使 join 或 group 子句的结果能够充当同一查询表达式中附加查询子句的源。
下面简单介绍一下linq查询表达式的基本语法:
From:子句创建一个LINQ表达式必须要以from子句开头。在查询数据源中,元素的属性是一个集合时,可以使用复合from子句对这个属性集合查询。多个from子句查询和复合from子句从字面上看似乎一样,其实是不同的操作。复合from子句查询的是单个数据源中的子元素的集合,而多个from子句,是载入多个数据源进行查询。from子句用来指定查询表达式的数据源和范围变量。它是查询表达式的必有部分,并且它出现在最开始。数据源不但可以包括查询本身的数据源,而且还可以包括子查询的数据源。范围变量用来表示数据源序列中的每一个元素。
Where:where子句的作用就是筛选元素,除了开始和结束位置,where子句几乎可以出现在LINQ表达式的任意位置。一个LINQ表达式中可以有where子句,也可以没有;可以有一个,可以有多个;多个where子句之间的关系相当于逻辑“与”,每个where子句可以包含1个或多个逻辑表达式,这些条件成为“谓词”,多个谓词之间用布尔运算符隔开
Select:子句 LINQ表达式的结果是使用select子句获得的。select子句可以对数据进行转换,这个过程称为“投影”。select子句产生的类容,取决于前面的所有子句及其自身表达式执行后的结果。在查询表达式中,select
子句可以指定将在执行查询时产生的值的类型。 该子句的结果将基于前面所有子句的计算结果以及
select 子句本身中的所有表达式。 查询表达式必须以 select 子句或group
子句结束。select子句产生的序列的类型决定了查询变量的类型,在最简单的情况下,select
子句仅指定范围变量。这会使返回的序列包含与数据源具有相同类型的元素。
Into:用于select,group,join子句中。into子句提供了一个临时标识符,它存储了into子句前面的查询内容,使它后面的子句可以方便的使用,对其进行再次查询,投影等操作。排序子句:LINQ可以按元素的一个或多个属性对元素进行排序。LINQ表达式的排序方式分为OrderBy、OrderByDescending、ThenBy、ThenByDescending这四种。
Join:如果一个数据源中元素的某个属性可以跟另一个数据源中元素的属性进行相等比较,那么这两个数据源可以用join子句进行关联
在数据库的查询中,多表连接查询是一大难点,也是多表查询里的重点。连接主要有以下四种情况:
INNER JOIN(内连接):如果表中有至少一个匹配,则返回行 【在语法中可以省略INNER关键字】
LEFT JOIN(左连接):从左表返回所有的行,如果右表中没有匹配,对应的列返回Null
RIGHT JOIN(右连接):从右表返回所有的行 ,如果左表中没有匹配,对应的列返回Null
FULL JOIN(全连接):只要其中一个表中存在匹配,则返回行(即结合左连接和右连接的结果)
Lamdba表达式:Lamdba表达式主要是用来简化匿名内部类,匿名内部类可以是接口也可以是抽象类,但是有一个前提条件:必须只有一个抽象方法。这样Lambda表达式就可以推断出你简化前的代码
下面演示一下lambda表达式的使用:
在Lambda表达式中,输入参数是Lambda运算符的左边部分。它包含参数的数量可以为0、1或者多个。只有当输入参数为1时,Lambda表达式左边的一对小括弧才可以省略。输入参数的数量大于或者等于2时,Lambda表达式左边的一对小括弧中的多个参数质检使用逗号(,)分割。