OFTYPE (Entity SQL)
Restituisce una raccolta di oggetti da un'espressione di query appartenente a un tipo specifico.
OFTYPE ( expression, [ONLY] test_type )
Argomenti
- expression
Qualsiasi espressione di query valida che restituisca una raccolta di oggetti.
- test_type
Il tipo rispetto al quale testare ogni oggetto restituito da expression. Il tipo deve essere qualificato da uno spazio dei nomi.
Valore restituito
Raccolta di oggetti appartenenti al tipo test_type o un tipo di base o un tipo derivato di test_type. Se si specifica ONLY, verranno restituite solo le istanze di test_type o una raccolta vuota.
Osservazioni
Un'espressione OFTYPE specifica un'espressione del tipo utilizzata per eseguire un test del tipo rispetto a ogni elemento di una raccolta. L'espressione OFTYPE produce una nuova raccolta del tipo specificato, contenente solo gli elementi equivalenti o al tipo o al relativo sottotipo.
Un'espressione OFTYPE è un'abbreviazione dell'espressione di query seguente:
select value treat(t as T) from ts as t where t is of (T)
Dal momento che Manager è un sottotipo di Employee, l'espressione seguente produce una raccolta dei soli manager da una raccolta di dipendenti:
OfType(employees, NamespaceName.Manager)
È inoltre possibile eseguire l'upcast di una raccolta utilizzando il filtro del tipo:
OfType(executives, NamespaceName.Manager)
Poiché tutti i dirigenti sono manager, la raccolta risultante contiene ancora tutti i dirigenti d'azienda originali, sebbene la raccolta sia ora indicata come una raccolta di manager.
Nella tabella seguente viene illustrato il comportamento dell'operatore OFTYPE con alcuni modelli. Tutte le eccezioni vengono generate sul lato client prima che il provider venga richiamato:
Modello | Comportamento |
---|---|
OFTYPE(Collection(EntityType), EntityType) |
Collection(EntityType) |
OFTYPE(Collection(ComplexType), ComplexType) |
Genera un'eccezione |
OFTYPE(Collection(RowType), RowType) |
Genera un'eccezione |
Esempio
Nella query Entity SQL seguente viene utilizzato l'operatore OFTYPE per restituire una raccolta di oggetti OnsiteCourse da una raccolta di oggetti Course. La query è basata sul Modello School.
SELECT onsiteCourse.Location FROM
OFTYPE(SchoolEntities.Courses, SchoolModel.OnsiteCourse)
AS onsiteCourse