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