Partilhar via


TREAT (Entidade SQL)

Trata um objeto de um determinado tipo de base como um objeto do tipo derivado especificado.

Sintaxe

TREAT ( expression as type)

Argumentos

expression Qualquer expressão de consulta válida que retorna uma entidade.

Nota

O tipo da expressão especificada deve ser um subtipo do tipo de dados especificado ou o tipo de dados deve ser um subtipo do tipo de expressão.

type Um tipo de entidade. O tipo deve ser qualificado por um namespace.

Nota

A expressão especificada deve ser um subtipo do tipo de dados especificado ou o tipo de dados deve ser um subtipo da expressão.

Devolver Valor

Um valor do tipo de dados especificado.

Observações

TREAT é usado para realizar upcasting entre classes relacionadas. Por exemplo, se Employee deriva de Person e p é do tipo Person, TREAT(p AS NamespaceName.Employee) upcasts uma instância genérica Person para Employee; isto é, permite que você trate p como Employee.

TREAT é usado em cenários de herança onde você pode fazer uma consulta como a seguinte:

SELECT TREAT(p AS NamespaceName.Employee)
FROM ContainerName.Person AS p
WHERE p IS OF (NamespaceName.Employee)

Esta consulta converte Person entidades para o Employee tipo. Se o valor de p não é realmente do tipo Employee, a expressão produz o valor null.

Nota

A expressão Employee especificada deve ser um subtipo do tipo Personde dados especificado ou o tipo de dados deve ser um subtipo da expressão. Caso contrário, a expressão resultará em um erro em tempo de compilação.

A tabela a seguir mostra o comportamento do tratamento em alguns padrões típicos e alguns padrões menos comuns. Todas as exceções são lançadas do lado do cliente antes que o provedor seja invocado:

Padrão Comportamento
TREAT (null AS EntityType) Devoluções DbNull.
TREAT (null AS ComplexType) Lança uma exceção.
TREAT (null AS RowType) Lança uma exceção/
TREAT (EntityType AS EntityType) Devoluções EntityType ou null.
TREAT (ComplexType AS ComplexType) Lança uma exceção.
TREAT (RowType AS RowType) Lança uma exceção.

Exemplo

A consulta Entity SQL a seguir usa o operador TREAT para converter um objeto do tipo Course em uma coleção de objetos do tipo OnsiteCourse. A consulta baseia-se no Modelo de Escola.

SELECT VALUE TREAT (course AS SchoolModel.OnsiteCourse) 
   FROM SchoolEntities.Courses AS course
   WHERE course IS OF( SchoolModel.OnsiteCourse)

Consulte também