Entity SQL 快速参考

本主题提供 Entity SQL 查询的快速参考。本主题中的查询基于 AdventureWorks 销售模型。

文本

字符串

字符串分为 Unicode 字符串和非 Unicode 字符串。非 Unicode 字符串前面附有 N。例如,N'hello'

下面是 Unicode 字符串的示例:

'hello'
--same as
"hello"

输出:

hello

日期时间

在日期时间文本中,日期部分和时间部分是必须存在的。这里没有默认值。

示例:

DATETIME '2006-12-25 01:01:00.000' 
--same as
DATETIME '2006-12-25 01:01'

输出:

12/25/2006 1:01:00 AM

整型

整型文本可以为类型 Int32 或 Int64。

示例:

--a collection of integers
{1, 2, 3}

输出:

1

2

3

其他

Entity SQL 支持的其他文字为、Guid、二进制、浮点/双精度型、十进制和 null。Entity SQL 中的 null 文本视为与 Entity Data Model (EDM) 中的每一种其他类型兼容。

类型构造函数

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) from LOB.Orders as o. 下面的示例使用属性提取运算符 (.) 来访问实体的属性。在使用属性提取运算符时,引用将自动被反引用。

示例:

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

CREATEREF 创建一个传递键的引用。KEY 用类型引用提取表达式的键部分。

示例:

SELECT VALUE Key(CreateRef(AdventureWorksEntities.Product, row(p.ProductID))) 
    FROM AdventureWorksEntities.Product as p

输出:

ProductID

980

365

771

...

函数

规范

规范函数的命名空间为 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

命名空间

USING 指定查询表达式中使用的命名空间。

示例:

using SqlServer; LOWER('AA');

输出:

aa

分页

可通过对 ORDER BY (Entity SQL) 子句声明 SKIPLIMIT 子子句来表示分页。

示例:

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,则 Navigate 返回 Ref<T>。如果结束端的基数为 n,则返回 Collection<Ref<T>>。

示例:

SELECT a.AddressID, (SELECT VALUE EREF(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 表达式

case 表达式计算一组布尔表达式的值以确定结果。

示例:

CASE WHEN AVG({25,12,11}) < 100 THEN TRUE ELSE FALSE END

输出:

TRUE

另请参见

概念

Entity SQL 参考
Entity SQL 概述