TREAT (Entity SQL)
将特定基类型的对象视为指定派生类型的对象。
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 在某些典型模式和非常见模式下的行为。 所有异常都在调用提供程序之前从客户端引发:
模式 | 行为 |
---|---|
|
返回 DbNull。 |
|
引发一个异常。 |
|
引发异常。 |
|
返回 EntityType 或 null。 |
|
引发一个异常。 |
|
引发一个异常。 |
示例
下面的 Entity SQL 查询使用 TREAT 运算符将类型为 Course 的对象转换为类型为 OnsiteCourse 的对象的集合。 此查询基于 School 模型。
SELECT VALUE TREAT (course as SchoolModel.OnsiteCourse)
FROM SchoolEntities.Courses as course
WHERE course IS OF( SchoolModel.OnsiteCourse)