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 Person
danych 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)