TREAT (Entity SQL)

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

TREAT ( expression as type)

参数

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

    Note注意

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

  • type
    一个实体类型。该类型必须由命名空间进行限定。

    Note注意

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

返回值

一个具有指定数据类型的值。

备注

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

Note注意

指定表达式Employee必须为指定数据类型 Person 的子类型,或者该数据类型必须为该表达式的子类型。否则,表达式会导致编译时错误。

下表显示了 TREAT 在某些典型模式和非常见模式下的行为。所有异常都在调用提供程序之前从客户端引发:

模式 行为

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 运算符将类型为 People 的对象转换为类型为 Student 的对象的集合。该查询基于 School Entity Data Model。有关如何生成此模型的信息,请参见生成 School 实体数据模型(实体框架快速入门)

SELECT VALUE TREAT (people as SchoolDataLib.Student) 
    FROM SchoolDataEntities.People as people 
    WHERE people IS OF( SchoolDataLib.Student)

此示例产生以下输出:

Chow
Haas
Hamilton
Adams
Paschke
Abrus
Hance

另请参见

概念

类型运算符 (Entity SQL)
Entity SQL 参考
可以为 Null 的结构化类型 (Entity SQL)