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)