比较语义 (Entity SQL)

执行下列任一 Entity SQL 运算符时都涉及类型实例的比较:

显式比较

相等运算:

  • =

  • !=

排序运算:

  • <

  • <=

  • >

  • >=

判断是否可为 Null 的运算:

  • IS NULL

  • IS NOT NULL

显式区别

相等区别:

  • DISTINCT

  • GROUP BY

排序区别:

  • ORDER BY

隐式区别

集运算和谓词(相等):

  • UNION

  • INTERSECT

  • EXCEPT

  • SET

  • OVERLAPS

项谓词(相等):

  • IN

支持的组合

下表说明了每种类型的比较运算符的所有受支持的组合:

类型

=

!=

GROUP BY

DISTINCT

UNION

INTERSECT

EXCEPT

SET

OVERLAPS

IN

< <=

> >=

ORDER BY

IS NULL

IS NOT NULL

实体类型

引用1

所有属性2

所有属性2

所有属性2

引发3

引发3

引用1

复杂类型

引发3

引发3

引发3

引发3

引发3

引发3

引发3

所有属性4

所有属性4

所有属性4

引发3

引发3

所有属性4

引发3

基元类型

特定于提供程序

特定于提供程序

特定于提供程序

特定于提供程序

特定于提供程序

特定于提供程序

特定于提供程序

多集

引发3

引发3

引发3

引发3

引发3

引发3

引发3

引用

5

5

5

5

引发

引发

5

关联

类型

引发3

引发

引发

引发

引发3

引发3

引发3

1给定实体类型实例的引用被隐式比较,如下面的示例所示:

SELECT p1, p2 
FROM AdventureWorksEntities.Product AS p1 
     JOIN AdventureWorksEntities.Product AS p2 
WHERE p1 != p2 OR p1 IS NULL

不能将实体实例与显式引用进行比较。如果试图这么做,则会引发异常。例如,以下查询将引发异常:

SELECT p1, p2 
FROM AdventureWorksEntities.Product AS p1 
     JOIN AdventureWorksEntities.Product AS p2 
WHERE p1 != REF(p2)

2复杂类型的属性在发送到存储之前被转换为扁平类型,因此它们变得可比较(前提是它们的所有属性可比较)。另请参见 4

3实体框架运行库检测到不受支持的情况,并在不牵扯提供程序/存储的情况下引发有意义的异常。

4试图比较所有属性。如果某个属性的类型不可比较,例如 text、ntext 或 image,则可能引发服务器异常。

5比较引用的所有单个元素(这包括实体集名称和该实体类型的所有键属性)。

另请参见

概念

Entity SQL 概述