将特定基类型的对象视为指定派生类型的对象。
语法
TREAT ( expression as type)
论据
expression 返回实体的任何有效查询表达式。
注释
指定表达式的类型必须是指定数据类型的子类型,或者数据类型必须是表达式类型的子类型。
type 实体类型。 类型必须由命名空间限定。
注释
指定的表达式必须是指定数据类型的子类型,或者数据类型必须是表达式的子类型。
返回值
指定数据类型的值。
注解
TREAT 用于在相关类之间执行向上转换。 例如,如果 Employee 派生自 Person p 的类型 Person, TREAT(p AS NamespaceName.Employee) 则向上转换泛型 Person 实例 Employee;也就是说,它允许将 p 视为 Employee。
TREAT 用于继承方案中,你可以执行如下查询:
SELECT TREAT(p AS NamespaceName.Employee)
FROM ContainerName.Person AS p
WHERE p IS OF (NamespaceName.Employee)
此查询将 Person 实体 Employee 向上转换为类型。 如果 p 的值实际上不是类型 Employee,则表达式将生成值 null。
注释
指定的表达式 Employee 必须是指定数据类型 Person的子类型,或者数据类型必须是表达式的子类型。 否则,表达式将导致编译时错误。
下表显示了对某些典型模式和一些不太常见的模式的处理行为。 在调用提供程序之前,会从客户端引发所有异常:
| 图案 | 行为 |
|---|---|
TREAT (null AS EntityType) |
返回 DbNull。 |
TREAT (null AS ComplexType) |
引发异常。 |
TREAT (null AS RowType) |
引发异常/ |
TREAT (EntityType AS EntityType) |
返回 EntityType 或 null。 |
TREAT (ComplexType AS ComplexType) |
引发异常。 |
TREAT (RowType AS RowType) |
引发异常。 |
示例:
以下 Entity SQL 查询使用 TREAT 运算符将 Type Course 的对象转换为 OnsiteCourse 类型的对象的集合。 查询基于 学校模型。
SELECT VALUE TREAT (course AS SchoolModel.OnsiteCourse)
FROM SchoolEntities.Courses AS course
WHERE course IS OF( SchoolModel.OnsiteCourse)