TREAT (Entity SQL)
Consente di trattare un oggetto di un tipo di base particolare come oggetto del tipo derivato specificato.
Sintassi
TREAT ( expression as type)
Argomenti
expression
Qualsiasi espressione di query valida che restituisce un'entità.
Nota
Il tipo dell'espressione specificata deve essere un sottotipo del tipo di dati specificato oppure il tipo di dati deve essere un sottotipo del tipo di espressione.
type
un tipo di entità. Il tipo deve essere qualificato da uno spazio dei nomi.
Nota
L'espressione specificata deve essere un sottotipo del tipo di dati specificato oppure il tipo di dati deve essere un sottotipo dell'espressione.
Valore restituito
Valore del tipo di dati specificato.
Osservazioni:
TREAT viene usato per eseguire l'upcast tra classi correlate. Se, ad esempio, Employee
deriva da Person
e p è di tipo Person
, TREAT(p AS NamespaceName.Employee)
consente di eseguire l'upcast di un'istanza generica di Person
a Employee
, ovvero consente di trattare p come Employee
.
TREAT viene usato negli scenari di ereditarietà dove è possibile eseguire una query simile alla seguente:
SELECT TREAT(p AS NamespaceName.Employee)
FROM ContainerName.Person AS p
WHERE p IS OF (NamespaceName.Employee)
Questa query consente di eseguire l'upcast delle entità Person
al tipo Employee
. Se il valore di p non è di tipo Employee
, l'espressione restituisce il valore null
.
Nota
L'espressione specificata Employee
deve essere un sottotipo del tipo di dati specificato Person
, oppure il tipo di dati deve essere un sottotipo dell'espressione. In caso contrario, l'espressione comporterà la generazione di un errore in fase di compilazione.
Nella tabella seguente viene illustrato il comportamento di TREAT su alcuni modelli tipici e su alcuni modelli meno comuni. Tutte le eccezioni vengono generate sul lato client prima che il provider venga richiamato:
Modello | Comportamento |
---|---|
TREAT (null AS EntityType) |
Restituisce DbNull . |
TREAT (null AS ComplexType) |
Genera un'eccezione. |
TREAT (null AS RowType) |
Genera un'eccezione/ |
TREAT (EntityType AS EntityType) |
Restituisce EntityType o null . |
TREAT (ComplexType AS ComplexType) |
Genera un'eccezione. |
TREAT (RowType AS RowType) |
Genera un'eccezione. |
Esempio
Nella query Entity SQL seguente viene usato l'operatore TREAT per convertire un oggetto del tipo Course in una raccolta di oggetti del tipo OnsiteCourse. La query è basata sul modello School.
SELECT VALUE TREAT (course AS SchoolModel.OnsiteCourse)
FROM SchoolEntities.Courses AS course
WHERE course IS OF( SchoolModel.OnsiteCourse)