Udostępnij za pośrednictwem


TREAT (Entity SQL)

Traktuje obiekt określonego typu podstawowego jako obiekt określonego typu pochodnego.

Składnia

TREAT ( expression as type)

Argumenty

expression Dowolne prawidłowe wyrażenie zapytania zwracające jednostkę.

Uwaga

Typ określonego wyrażenia musi być podtypem określonego typu danych lub typ danych musi być podtypem typu wyrażenia.

type Typ jednostki. Typ musi być kwalifikowany przez przestrzeń nazw.

Uwaga

Określone wyrażenie musi być podtypem określonego typu danych lub typ danych musi być podtypem wyrażenia.

Wartość zwracana

Wartość określonego typu danych.

Uwagi

TREAT służy do wykonywania upcastingu między powiązanymi klasami. Na przykład jeśli Employee pochodzi z Person i p jest typu Person, TREAT(p AS NamespaceName.Employee) upcasts wystąpienie ogólne Person do Employee; oznacza to, że pozwala traktować p jako Employee.

FUNKCJA TREAT jest używana w scenariuszach dziedziczenia, w których można wykonać zapytanie podobne do następującego:

SELECT TREAT(p AS NamespaceName.Employee)
FROM ContainerName.Person AS p
WHERE p IS OF (NamespaceName.Employee)

To zapytanie wysyła Person jednostki w górę Employee do typu. Jeśli wartość p nie jest w rzeczywistości typem Employee, wyrażenie zwraca wartość null.

Uwaga

Określone wyrażenie Employee musi być podtypem określonego typu Persondanych lub typ danych musi być podtypem wyrażenia. W przeciwnym razie wyrażenie spowoduje błąd czasu kompilacji.

W poniższej tabeli przedstawiono zachowanie traktowania niektórych typowych wzorców i niektóre mniej typowe wzorce. Wszystkie wyjątki są zgłaszane po stronie klienta przed wywołaniem dostawcy:

Wzorzec Zachowanie
TREAT (null AS EntityType) Zwraca wartość DbNull.
TREAT (null AS ComplexType) Zgłasza wyjątek.
TREAT (null AS RowType) Zgłasza wyjątek/
TREAT (EntityType AS EntityType) Zwraca wartość EntityType lub null.
TREAT (ComplexType AS ComplexType) Zgłasza wyjątek.
TREAT (RowType AS RowType) Zgłasza wyjątek.

Przykład

Następujące zapytanie Entity SQL używa operatora TREAT, aby przekonwertować obiekt typu Course na kolekcję obiektów typu OnsiteCourse. Zapytanie jest oparte na modelu szkolnym.

SELECT VALUE TREAT (course AS SchoolModel.OnsiteCourse) 
   FROM SchoolEntities.Courses AS course
   WHERE course IS OF( SchoolModel.OnsiteCourse)

Zobacz też