要使用entity framework,EntitySQL 是需要学习下的,从msdn 搜集了一些资料。
1.Entity SQL 参考
本节包含 Entity SQL 参考主题。 本主题总结 Entity SQL 运算符并按类别对其分组。
算术运算符
算术运算符对两个表达式执行数学运算,这两个表达式可以是一个或多个数值数据类型。 下表列出了 Entity SQL 算术运算符。
运算符 | 用途 |
---|---|
加法。 | |
除法。 | |
返回除法运算的余数。 | |
乘法。 | |
求反。 | |
减法。 |
规范函数
所有数据提供程序都支持规范函数,并且所有查询技术都可以使用规范函数。 下表列出了规范函数。
函数 | 类型 |
---|---|
讨论 Entity SQL 聚合规范函数。 | |
讨论 Entity SQL 数学规范函数。 | |
讨论 Entity SQL 字符串规范函数。 | |
讨论 Entity SQL 日期和时间规范函数。 | |
讨论 Entity SQL 按位规范函数。 | |
讨论未分类为按位、日期/时间、字符串、数字或聚合函数的函数。 |
比较运算符
比较运算符适用于下列类型:Byte、Int16、Int32、Int64、Double、Single、Decimal、String、DateTime、Date、Time、DateTimeOffset。 应用比较运算符之前将对操作数进行隐性类型升级。 比较运算符总是生成布尔值。 如果操作数中至少有一个 null,则结果为 null。
相等和不相等适用于有标识的所有对象类型,如 Boolean 类型。 拥有相同标识的非基元对象被视为相等。 下表列出了 Entity SQL 比较运算符。
运算符 | 说明 |
---|---|
比较两个表达式是否相等。 | |
比较两个表达式以确定左侧表达式的值是否大于右侧表达式的值。 | |
比较两个表达式以确定左侧表达式的值是否大于或等于右侧表达式的值。 | |
确定查询表达式是否为 null。 | |
比较两个表达式以确定左侧表达式的值是否小于右侧表达式的值。 | |
比较两个表达式以确定左侧表达式的值是否小于或等于右侧表达式的值。 | |
确定表达式的结果值是否在指定范围内。 | |
比较两个表达式以确定左侧表达式是否不等于右侧表达式。 | |
确定特定字符串是否与指定的模式匹配。 |
逻辑和 Case 表达式运算符
逻辑运算符测试条件的真实性。 CASE 表达式计算一组布尔表达式的值以确定结果。 下表列出了逻辑和 Case 表达式运算符。
运算符 | 说明 |
---|---|
逻辑与。 | |
逻辑非。 | |
逻辑或。 | |
求出一组布尔表达式的值以确定结果。 | |
指定 Entity SQL 语句的执行条件。 | |
当 WHEN 子句取值为 true 时的结果。 | |
求出一个或多个布尔表达式的值。 |
查询运算符
查询运算符用于定义返回实体数据的查询表达式。 下表列出了查询运算符。
运算符 | 用途 |
---|---|
指定 SELECT 语句中使用的集合。 | |
指定由查询 (SELECT) 表达式返回的对象要分入的组。 | |
返回从聚合与之相关的组分区提取的参数值集合。 | |
指定组或聚合的搜索条件。 | |
与 ORDER BY 子句一起使用,以执行物理分页。 | |
指定用于 SELECT 语句所返回的对象的排序顺序。 | |
指定投影中由查询返回的元素。 | |
与 ORDER BY 子句一起使用,以执行物理分页。 | |
指定查询结果中将只返回第一组行。 | |
按条件筛选由查询返回的数据。 |
引用运算符
引用是指向特定实体集中的特定实体的逻辑指针(外键)。 Entity SQL 支持使用以下运算符对引用进行构造、解构和导航:
运算符 | 用途 |
---|---|
创建对实体集中的实体的引用。 | |
取消引用一个引用值,并生成该取消引用的结果。 | |
提取引用或实体表达式的键。 | |
使您可以从一个实体类型到另一个实体类型对关系进行导航 | |
返回对实体实例的引用。 |
集合运算符
Entity SQL 提供了各种功能强大的集运算符。 这包括与 Transact-SQL 运算符类似的集运算符,例如 UNION、INTERSECT、EXCEPT 和 EXISTS。 Entity SQL 还支持用于清除重复项 (SET)、成员身份测试 (IN) 和联接 (JOIN) 的运算符。 下表列出了 Entity SQL 集运算符。
运算符 | 用途 |
---|---|
从多值集合中提取元素。 | |
返回由 EXCEPT 操作数左侧的查询表达式返回而不由 EXCEPT 操作数右侧的查询表达式返回的任何非重复值的集合。 | |
确定集合是否为空。 | |
将一个由多个集合组成的集合转换为一个平展集合。 | |
确定某个值是否与某个集合中的任何值匹配。 | |
返回 INTERSECT 操作数左右两边的两个查询表达式均返回的所有非重复值的集合。 | |
确定两个集合是否具有公共元素。 | |
用于通过生成一个新集合(其中移除了所有重复元素)将对象集合转换为一个集。 | |
将两个或更多查询的结果组合成单个集合。 |
类型运算符
Entity SQL 提供了用于构造、查询和操作表达式(值)的类型的运算。 下表列出了用于处理类型的运算符。
运算符 | 用途 |
---|---|
将一种数据类型的表达式转换为另一种数据类型的表达式。 | |
用于 FUNCTION 操作中,以声明实体类型或复杂类型的集合。 | |
确定表达式的类型是否为指定类型或指定类型的某个子类型。 | |
从查询表达式返回特定类型的对象集合。 | |
用于创建实体类型或复杂类型的实例。 | |
根据值列表创建多集的实例。 | |
从一个或多个值构造结构上类型化的匿名记录。 | |
将特定基类型的对象视为指定派生类型的对象。 |
其他运算符
下表列出了其他 Entity SQL 运算符。
运算符 | 用途 |
---|---|
用于在 Entity SQL 中串联字符串。 | |
用于访问结构化概念模型类型实例的属性或字段的值。 | |
包括 Entity SQL 注释。 | |
定义可在 Entity SQL 查询中执行的内联函数。 |
2.Entity SQL 查询的快速参考
本主题提供 Entity SQL 查询的快速参考。 本主题中的查询基于 AdventureWorks 销售模型。
文字
String
字符串分为 Unicode 字符串和非 Unicode 字符串。 Unicode 字符串前面附有 N。 例如,N'hello'
。
下面是非 Unicode 字符串的示例:
'hello' --same as "hello"
输出:
值 |
---|
hello |
DateTime
在日期时间文本中,日期部分和时间部分是必须存在的。 这里没有默认值。
示例:
DATETIME '2006-12-25 01:01:00.000' --same as DATETIME '2006-12-25 01:01'
输出:
值 |
---|
12/25/2006 1:01:00 AM |
Integer
整数文本可以为 Int32 (123)、UInt32 (123U)、Int64 (123L) 和 UInt64 (123UL) 类型。
示例:
--a collection of integers {1, 2, 3}
输出:
值 |
---|
1 |
2 |
3 |
其他
Entity SQL 支持的其他文字为、Guid、二进制、浮点/双精度型、十进制和 null。 Entity SQL 中的 null 文本视为与概念模型中的每一种其他类型兼容。
类型构造函数
ROW
ROW (Entity SQL) 构造一个匿名的结构化类型(记录)值,如下所示:ROW(1 AS myNumber, ‘Name’ AS myName).
示例:
SELECT VALUE row (product.ProductID as ProductID, product.Name as ProductName) FROM AdventureWorksEntities.Product AS product
输出:
ProductID | Name |
---|---|
1 | Adjustable Race |
879 | All-Purpose Bike Stand |
712 | AWC Logo Cap |
... | ... |
MULTISET
MULTISET (Entity SQL) 构造集合,如:
MULTISET(1,2,2,3)
--same as
-{1,2,2,3}.
示例:
SELECT VALUE product FROM AdventureWorksEntities.Product AS product WHERE product.ListPrice IN MultiSet (125, 300)
输出:
ProductID | Name | ProductNumber | … |
---|---|---|---|
842 | Touring-Panniers, Large | PA-T100 | … |
Object
命名类型构造函数 (Entity SQL) 构造(命名的)用户定义对象,如 person("abc", 12)
。
示例:
SELECT VALUE AdventureWorksModel.SalesOrderDetail (o.SalesOrderDetailID, o.CarrierTrackingNumber, o.OrderQty, o.ProductID, o.SpecialOfferID, o.UnitPrice, o.UnitPriceDiscount, o.rowguid, o.ModifiedDate) FROM AdventureWorksEntities.SalesOrderDetail AS o
输出:
SalesOrderDetailID | CarrierTrackingNumber | OrderQty | ProductID | ... |
---|---|---|---|---|
1 | 4911-403C-98 | 1 | 776 | ... |
2 | 4911-403C-98 | 3 | 777 | ... |
... | ... | ... | ... | ... |
引用
REF
REF 创建对实体类型实例的引用。 例如,下面的查询返回对 Orders 实体集中每一个 Order 实体的引用:
SELECT REF(o) AS OrderID FROM Orders AS o
输出:
值 |
---|
1 |
2 |
3 |
... |
下面的示例使用属性提取运算符 (.) 访问实体的属性。 在使用属性提取运算符时,引用将自动被反引用。
示例:
SELECT VALUE REF(p).Name FROM AdventureWorksEntities.Product as p
输出:
值 |
---|
Adjustable Race |
All-Purpose Bike Stand |
AWC Logo Cap |
... |
DEREF
DEREF 反引用一个引用值,并生成该反引用的结果。 例如,下面的查询生成 Orders 实体集中每一个 Order 的 Order 实体:SELECT DEREF(o2.r) FROM (SELECT REF(o) AS r FROM LOB.Orders AS o) AS o2
。
示例:
SELECT VALUE DEREF(REF(p)).Name FROM AdventureWorksEntities.Product as p
输出:
值 |
---|
Adjustable Race |
All-Purpose Bike Stand |
AWC Logo Cap |
... |
CREATEREF 和 KEY
函数
规范
规范函数的命名空间为 Edm,如 Edm.Length("string")
中所示。 您无需指定命名空间,除非导入的另一个命名空间中包含与规范函数同名的函数。 如果两个命名空间有相同的函数,用户应指定完整名称。
示例:
SELECT Length(c. FirstName) As NameLen FROM AdventureWorksEntities.Contact AS c WHERE c.ContactID BETWEEN 10 AND 12
输出:
NameLen |
---|
6 |
6 |
5 |
特定于 Microsoft 提供程序
特定于 Microsoft 提供程序的函数位于 SqlServer 命名空间中。
示例:
SELECT SqlServer.LEN(c.EmailAddress) As EmailLen FROM AdventureWorksEntities.Contact AS c WHERE c.ContactID BETWEEN 10 AND 12
输出:
EmailLen |
---|
27 |
27 |
26 |
命名空间
分页
可通过对 ORDER BY (Entity SQL) 子句声明 SKIP 和 LIMIT 子子句来表示分页。
示例:
SELECT c.ContactID as ID, c.LastName as Name FROM AdventureWorks.Contact AS c ORDER BY c.ContactID SKIP 9 LIMIT 3;
输出:
ID | Name |
---|---|
10 | Adina |
11 | Agcaoili |
12 | Aguilar |
分组
GROUPING BY 指定查询 (SELECT) 表达式返回的对象要分成的组。
示例:
SELECT VALUE name FROM AdventureWorksEntities.Product as P GROUP BY P.Name HAVING MAX(P.ListPrice) > 5
输出:
name |
---|
LL Mountain Seat Assembly |
ML Mountain Seat Assembly |
HL Mountain Seat Assembly |
... |
导航
关系导航运算符用于导航从一个实体(起始端)到另一个实体(结束端)的关系。 NAVIGATE 接受限定为 <命名空间>.<关系类型名称> 的关系类型。 如果结束端的基数为 1,导航将返回 Ref<T>。 如果结束端的基数为 n,将返回 Collection<Ref<T>>。
示例:
SELECT a.AddressID, (SELECT VALUE DEREF(v) FROM NAVIGATE(a, AdventureWorksModel.FK_SalesOrderHeader_Address_BillToAddressID) AS v) FROM AdventureWorksEntities.Address AS a
输出:
AddressID |
---|
1 |
2 |
3 |
... |
SELECT VALUE 和 SELECT
SELECT VALUE
Entity SQL 提供了 SELECT VALUE 子句以跳过隐式行构造。 SELECT VALUE 子句中只能指定一项。 在使用这样的子句时,将不会对 SELECT 子句中的项构造行包装器,并且可生成所要形状的集合,例如:SELECT VALUE a
。
示例:
SELECT VALUE p.Name FROM AdventureWorksEntities.Product as p
输出:
Name |
---|
Adjustable Race |
All-Purpose Bike Stand |
AWC Logo Cap |
... |
SELECT
Entity SQL 还提供了用于构造任意行的行构造函数。 SELECT 接受投影中的一个或多个元素,并生成含有字段的数据记录,例如:SELECT a, b, c
。
示例:
SELECT p.Name, p.ProductID FROM AdventureWorksEntities.Product as p Output:
Name | ProductID |
---|---|
Adjustable Race | 1 |
All-Purpose Bike Stand | 879 |
AWC Logo Cap | 712 |
... | ... |
CASE 表达式
这些是基础的部分,剩下的可以参考msdnhttp://technet.microsoft.com/zh-cn/library/bb387145.aspx