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é.

Syntaxe

TREAT ( expression as type)

Arguments

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

Notes

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.

Notes

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.

Notes

L’expression spécifiée Employee 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 côté client avant que le fournisseur 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 la valeur null.
TREAT (ComplexType AS ComplexType) Lève une exception.
TREAT (RowType AS RowType) Lève une exception.

Exemple

La requête Entity SQL ci-dessous utilise l’opérateur TREAT pour convertir un objet du type Course en collection d’objets du type OnsiteCourse. Cette requête est basée sur le modèle School.

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

Voir aussi