比较语义 (Entity SQL)

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

显式比较

相等运算:

  • =

  • !=

排序运算:

  • <

  • <=

  • >

  • >=

判断是否可为 Null 的运算:

  • 为 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 为 NULL

不为 NULL
实体类型 Ref1 所有属性2 所有属性2 所有属性2 Throw3 Throw3 Ref1
复杂类型 Throw3 Throw3 Throw3 Throw3 Throw3 Throw3 Throw3
所有属性4 所有属性4 所有属性4 Throw3 Throw3 所有属性4 Throw3
基元类型 特定于提供程序 特定于提供程序 特定于提供程序 特定于提供程序 特定于提供程序 特定于提供程序 特定于提供程序
多集 Throw3 Throw3 Throw3 Throw3 Throw3 Throw3 Throw3
引用 5 5 5 5 Throw Throw 5
关联

类型
Throw3 Throw Throw Throw Throw3 Throw3 Throw3

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比较引用的所有单个元素(这包括实体集名称和该实体类型的所有键属性)。

请参阅