TREAT (Entity SQL)
Trata un objeto de un tipo base determinado como un objeto del tipo derivado especificado.
Sintaxis
TREAT ( expression as type)
Argumentos
expression
Cualquier expresión de consulta válida que devuelve una entidad.
Nota:
El tipo de la expresión especificada debe ser un subtipo del tipo de datos especificado, o el tipo de datos debe ser un subtipo del tipo de expresión.
type
Tipo de entidad. El tipo debe estar calificado por un espacio de nombres.
Nota:
La expresión especificada debe ser un subtipo del tipo de datos especificado, o el tipo de datos debe ser un subtipo de la expresión.
Valor devuelto
Un valor del tipo de datos especificado.
Observaciones
TREAT se utiliza para realizar una conversión entre clases relacionadas. Por ejemplo, si Employee
deriva de Person
y p es de tipo Person
, TREAT(p AS NamespaceName.Employee)
convierte una instancia de Person
genérica a Employee
; es decir, permite tratar p como Employee
.
TREAT se utiliza en situaciones de herencia donde se puede realizar una consulta como la siguiente:
SELECT TREAT(p AS NamespaceName.Employee)
FROM ContainerName.Person AS p
WHERE p IS OF (NamespaceName.Employee)
Este consulta convierte entidades Person
al tipo Employee
. Si el valor de p no es realmente de tipo Employee
, la expresión obtiene el valor null
.
Nota:
La expresión especificada Employee
debe ser un subtipo del tipo de datos especificado Person
, o el tipo de datos debe ser un subtipo de la expresión. De lo contrario, la expresión producirá un error en tiempo de compilación.
En la tabla siguiente se muestra el comportamiento del tratamiento en algunos patrones típicos y algunos patrones menos comunes. Todas las excepciones se producen en el cliente antes de que se llame al proveedor:
Patrón | Comportamiento |
---|---|
TREAT (null AS EntityType) |
Devuelve DbNull . |
TREAT (null AS ComplexType) |
Inicia una excepción. |
TREAT (null AS RowType) |
Produce una excepción. |
TREAT (EntityType AS EntityType) |
Devuelve EntityType o null . |
TREAT (ComplexType AS ComplexType) |
Inicia una excepción. |
TREAT (RowType AS RowType) |
Inicia una excepción. |
Ejemplo
La consulta de Entity SQL siguiente usa el operador TREAT para convertir un objeto del tipo Course en una colección de objetos del tipo OnsiteCourse. La consulta se basa en el modelo School.
SELECT VALUE TREAT (course AS SchoolModel.OnsiteCourse)
FROM SchoolEntities.Courses AS course
WHERE course IS OF( SchoolModel.OnsiteCourse)