Udostępnij za pośrednictwem


OFTYPE (Entity SQL)

Zwraca kolekcję obiektów z wyrażenia zapytania, które jest określonego typu.

Składnia

OFTYPE ( expression, [ONLY] test_type )

Argumenty

expression Każde prawidłowe wyrażenie zapytania zwracające kolekcję obiektów.

test_type Typ do testowania każdego obiektu zwróconego przez expression element . Typ musi być kwalifikowany przez przestrzeń nazw.

Wartość zwracana

Kolekcja obiektów typu test_type, lub typu podstawowego lub pochodnego typu test_type. W przypadku określenia tylko wystąpień kolekcji test_type lub będzie zwracana pusta kolekcja.

Uwagi

Wyrażenie OFTYPE określa wyrażenie typu wystawione w celu wykonania testu typu dla każdego elementu kolekcji. Wyrażenie OFTYPE tworzy nową kolekcję określonego typu zawierającej tylko te elementy, które były równoważne z tym typem lub podtypem.

Wyrażenie OFTYPE jest skrótem następującego wyrażenia zapytania:

select value treat(t as T) from ts as t where t is of (T)

Biorąc pod uwagę, że menedżer jest podtypem Employee, następujące wyrażenie tworzy kolekcję tylko menedżerów z kolekcji pracowników:

OfType(employees, NamespaceName.Manager)

Istnieje również możliwość rzutowania kolekcji przy użyciu filtru typu:

OfType(executives, NamespaceName.Manager)

Ponieważ wszyscy kierownicy są menedżerami, wynikowa kolekcja nadal zawiera wszystkie oryginalne kierownictwo, choć kolekcja jest teraz wpisywana jako kolekcja menedżerów.

W poniższej tabeli przedstawiono zachowanie OFTYPE operatora na niektórych wzorcach. Wszystkie wyjątki są zgłaszane po stronie klienta przed wywołaniem dostawcy:

Wzorzec Zachowanie
OFTYPE(Collection(EntityType), EntityType) Collection(EntityType)
OFTYPE(Collection(ComplexType), ComplexType) Zgłasza
OFTYPE(Collection(RowType), RowType) Zgłasza

Przykład

Następujące zapytanie Entity SQL używa operatora OFTYPE, aby zwrócić kolekcję obiektów OnsiteCourse z kolekcji obiektów Course. Zapytanie jest oparte na modelu szkolnym.

SELECT onsiteCourse.Location FROM 
    OFTYPE(SchoolEntities.Courses, SchoolModel.OnsiteCourse) 
    AS onsiteCourse

Zobacz też