Partager via


TREAT (Entity SQL)

Traite un objet d'un type de base déterminé en tant qu'objet du type dérivé spécifié.

TREAT ( expression as type)

Arguments

  • expression
    Toute expression de requête valide qui retourne une entité.

    NoteRemarque

    Le type de l'expression spécifiée doit être un sous-type du type de données spécifié, ou le type de données doit être un sous-type du type de l'expression.

  • type
    Type d'entité. Le type doit être qualifié par un espace de noms.

    NoteRemarque

    L'expression spécifiée doit être un sous-type du type de données spécifié, ou le type de données doit être un sous-type de l'expression.

Valeur de retour

Valeur du type de données spécifié.

Notes

TREAT est utilisé pour effectuer un upcast entre des classes connexes. Par exemple, si Employee est dérivé de Person et que p est de type Person, TREAT(p AS NamespaceName.Employee) effectue un upcast d'une instance générique de Person vers Employee ; autrement dit, cela vous permet de traiter p en tant que Employee.

TREAT est utilisé dans des scénarios d'héritage dans lesquels vous pouvez exécuter une requête de ce type :

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

Cette requête effectue un upcast d'entités Person vers le type Employee. S'il s'avère que la valeur de p n'est pas de type Employee, l'expression génère la valeur null.

NoteRemarque

L'expressionEmployeespécifiée doit être un sous-type du type de données spécifié Person, ou le type de données doit être un sous-type de l'expression. Sinon, l'expression génère une erreur de compilation.

Le tableau suivant indique le comportement de TREAT sur certains modèles communs et d'autres moins courants. Toutes les exceptions sont levées du côté client avant que le fournisseur ne soit appelé :

Modèle Comportement

TREAT (null AS EntityType)

Retourne DbNull.

TREAT (null AS ComplexType)

Lève une exception.

TREAT (null AS RowType)

Lève une exception/

TREAT (EntityType AS EntityType)

Retourne EntityType ou null.

TREAT (ComplexType AS ComplexType)

Lève une exception.

TREAT (RowType AS RowType)

Lève une exception.

Exemple

La requête Entité SQL ci-dessous utilise l'opérateur TREAT pour convertir un objet de type People en collection d'objets de type Student. Cette requête est basée sur le modèle School Entity Data Model. Pour obtenir des informations sur la façon de générer ce modèle, voir Génération du modèle Entity Data Model School (Démarrage rapide d'Entity Framework).

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

Cet exemple génère la sortie suivante :

Chow
Haas
Hamilton
Adams
Paschke
Abrus
Hance

Voir aussi

Concepts

Opérateurs de type [Entity SQL]
Référence Entity SQL
Types structurés nullables (Entity SQL)