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