开发随笔-EntitySQL 学习

本文介绍了EntitySQL的基本语法和常用运算符,包括算术、比较、逻辑、引用和集合运算符等。此外,还提供了快速查询参考,涵盖文字、类型构造函数、引用、函数和分页等内容。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

要使用entity framework,EntitySQL 是需要学习下的,从msdn 搜集了一些资料。

1.Entity SQL 参考

本节包含 Entity SQL 参考主题。 本主题总结 Entity SQL 运算符并按类别对其分组。

算术运算符

算术运算符对两个表达式执行数学运算,这两个表达式可以是一个或多个数值数据类型。 下表列出了 Entity SQL 算术运算符。

运算符用途

+(加)

加法。

/(除)

除法。

%(取模)

返回除法运算的余数。

*(乘)

乘法。

-(负号)

求反。

-(减)

减法。

规范函数

所有数据提供程序都支持规范函数,并且所有查询技术都可以使用规范函数。 下表列出了规范函数。

函数类型

聚合 Entity SQL 规范函数

讨论 Entity SQL 聚合规范函数。

数学规范函数

讨论 Entity SQL 数学规范函数。

字符串规范函数

讨论 Entity SQL 字符串规范函数。

日期和时间规范函数

讨论 Entity SQL 日期和时间规范函数。

按位规范函数

讨论 Entity SQL 按位规范函数。

其他规范函数

讨论未分类为按位、日期/时间、字符串、数字或聚合函数的函数。

比较运算符

比较运算符适用于下列类型:ByteInt16Int32Int64DoubleSingleDecimalStringDateTimeDateTimeDateTimeOffset 应用比较运算符之前将对操作数进行隐性类型升级。 比较运算符总是生成布尔值。 如果操作数中至少有一个 null,则结果为 null

相等和不相等适用于有标识的所有对象类型,如 Boolean 类型。 拥有相同标识的非基元对象被视为相等。 下表列出了 Entity SQL 比较运算符。

运算符说明

=(等于)

比较两个表达式是否相等。

>(大于)

比较两个表达式以确定左侧表达式的值是否大于右侧表达式的值。

>=(大于或等于)

比较两个表达式以确定左侧表达式的值是否大于或等于右侧表达式的值。

IS [NOT] NULL

确定查询表达式是否为 null。

<(小于)

比较两个表达式以确定左侧表达式的值是否小于右侧表达式的值。

<=(小于或等于)

比较两个表达式以确定左侧表达式的值是否小于或等于右侧表达式的值。

[NOT] BETWEEN

确定表达式的结果值是否在指定范围内。

!=(不等于)

比较两个表达式以确定左侧表达式是否不等于右侧表达式。

[NOT] LIKE

确定特定字符串是否与指定的模式匹配。

逻辑和 Case 表达式运算符

逻辑运算符测试条件的真实性。 CASE 表达式计算一组布尔表达式的值以确定结果。 下表列出了逻辑和 Case 表达式运算符。

运算符说明

&&(逻辑与)

逻辑与。

!(逻辑非)

逻辑非。

||(逻辑或)

逻辑或。

CASE

求出一组布尔表达式的值以确定结果。

ELSE

指定 Entity SQL 语句的执行条件。

THEN

当 WHEN 子句取值为 true 时的结果。

WHEN

求出一个或多个布尔表达式的值。

查询运算符

查询运算符用于定义返回实体数据的查询表达式。 下表列出了查询运算符。

运算符用途

FROM

指定 SELECT 语句中使用的集合。

GROUP BY

指定由查询 (SELECT) 表达式返回的对象要分入的组。

GroupPartition

返回从聚合与之相关的组分区提取的参数值集合。

HAVING

指定组或聚合的搜索条件。

LIMIT

与 ORDER BY 子句一起使用,以执行物理分页。

ORDER BY

指定用于 SELECT 语句所返回的对象的排序顺序。

SELECT

指定投影中由查询返回的元素。

SKIP

与 ORDER BY 子句一起使用,以执行物理分页。

TOP

指定查询结果中将只返回第一组行。

WHERE

按条件筛选由查询返回的数据。

引用运算符

引用是指向特定实体集中的特定实体的逻辑指针(外键)。 Entity SQL 支持使用以下运算符对引用进行构造、解构和导航:

运算符用途

CREATEREF

创建对实体集中的实体的引用。

DEREF

取消引用一个引用值,并生成该取消引用的结果。

KEY

提取引用或实体表达式的键。

NAVIGATE

使您可以从一个实体类型到另一个实体类型对关系进行导航

REF

返回对实体实例的引用。

集合运算符

Entity SQL 提供了各种功能强大的集运算符。 这包括与 Transact-SQL 运算符类似的集运算符,例如 UNION、INTERSECT、EXCEPT 和 EXISTS。 Entity SQL 还支持用于清除重复项 (SET)、成员身份测试 (IN) 和联接 (JOIN) 的运算符。 下表列出了 Entity SQL 集运算符。

运算符用途

ANYELEMENT

从多值集合中提取元素。

EXCEPT

返回由 EXCEPT 操作数左侧的查询表达式返回而不由 EXCEPT 操作数右侧的查询表达式返回的任何非重复值的集合。

[NOT] EXISTS

确定集合是否为空。

FLATTEN

将一个由多个集合组成的集合转换为一个平展集合。

[NOT] IN

确定某个值是否与某个集合中的任何值匹配。

INTERSECT

返回 INTERSECT 操作数左右两边的两个查询表达式均返回的所有非重复值的集合。

OVERLAPS

确定两个集合是否具有公共元素。

SET

用于通过生成一个新集合(其中移除了所有重复元素)将对象集合转换为一个集。

UNION

将两个或更多查询的结果组合成单个集合。

类型运算符

Entity SQL 提供了用于构造、查询和操作表达式(值)的类型的运算。 下表列出了用于处理类型的运算符。

运算符用途

CAST

将一种数据类型的表达式转换为另一种数据类型的表达式。

COLLECTION

用于 FUNCTION 操作中,以声明实体类型或复杂类型的集合。

IS [NOT] OF

确定表达式的类型是否为指定类型或指定类型的某个子类型。

OFTYPE

从查询表达式返回特定类型的对象集合。

命名类型构造函数

用于创建实体类型或复杂类型的实例。

MULTISET

根据值列表创建多集的实例。

ROW

从一个或多个值构造结构上类型化的匿名记录。

TREAT

将特定基类型的对象视为指定派生类型的对象。

其他运算符

下表列出了其他 Entity SQL 运算符。

运算符用途

+(字符串串联)

用于在 Entity SQL 中串联字符串。

.(成员访问)

用于访问结构化概念模型类型实例的属性或字段的值。

--(注释)

包括 Entity SQL 注释。

FUNCTION

定义可在 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

输出:

ProductIDName

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)

输出:

ProductIDNameProductNumber

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

输出:

SalesOrderDetailIDCarrierTrackingNumberOrderQtyProductID...

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

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) 子句声明 SKIP 和 LIMIT 子子句来表示分页。

示例:

SELECT c.ContactID as ID, c.LastName as Name FROM 
    AdventureWorks.Contact AS c ORDER BY c.ContactID SKIP 9 LIMIT 3;

输出:

IDName

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:

NameProductID

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


这些是基础的部分,剩下的可以参考msdn

http://technet.microsoft.com/zh-cn/library/bb387145.aspx



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

似水流年

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值