OFTYPE (Entity SQL)

Restituisce una raccolta di oggetti da un'espressione di query appartenente a un tipo specifico.

Sintassi

OFTYPE ( expression, [ONLY] test_type )

Argomenti

expression Qualsiasi espressione di query valida che restituisce una raccolta di oggetti.

test_type Tipo rispetto a cui 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_typeo 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 usata 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 usando 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

La query Entity SQL seguente usa 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

Vedi anche