TREAT (实体 SQL)

将特定基类型的对象视为指定派生类型的对象。

语法

TREAT ( expression as type)

论据

expression 返回实体的任何有效查询表达式。

注释

指定表达式的类型必须是指定数据类型的子类型,或者数据类型必须是表达式类型的子类型。

type 实体类型。 类型必须由命名空间限定。

注释

指定的表达式必须是指定数据类型的子类型,或者数据类型必须是表达式的子类型。

返回值

指定数据类型的值。

注解

TREAT 用于在相关类之间执行向上转换。 例如,如果 Employee 派生自 Person p 的类型 PersonTREAT(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) 返回 EntityTypenull
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)

另请参阅