TREAT (Entity SQL)
Zachází s objektem konkrétního základního typu jako s objektem zadaného odvozeného typu.
Syntaxe
TREAT ( expression as type)
Argumenty
expression
Libovolný platný výraz dotazu, který vrací entitu.
Poznámka:
Typ zadaného výrazu musí být podtyp zadaného datového typu nebo datový typ musí být podtyp typu výrazu.
type
Typ entity. Typ musí být kvalifikovaný oborem názvů.
Poznámka:
Zadaný výraz musí být podtyp zadaného datového typu nebo datový typ musí být podtyp výrazu.
Návratová hodnota
Hodnota zadaného datového typu.
Poznámky
FUNKCE TREAT se používá k provádění přesměrování mezi souvisejícími třídami. Pokud je například odvozeno od Person
a p je typu Person
, TREAT(p AS NamespaceName.Employee)
přetypuje obecnou Person
instanci na Employee
; to znamená, že umožňuje považovat p jako Employee
.Employee
Funkce TREAT se používá ve scénářích dědičnosti, ve kterých můžete provádět dotaz podobný tomuto:
SELECT TREAT(p AS NamespaceName.Employee)
FROM ContainerName.Person AS p
WHERE p IS OF (NamespaceName.Employee)
Tento dotaz přetypuje Person
entity na Employee
typ. Pokud hodnota p není ve skutečnosti typu Employee
, výraz získá hodnotu null
.
Poznámka:
Zadaný výraz Employee
musí být podtyp zadaného datového typu Person
nebo datový typ musí být podtyp výrazu. V opačném případě výsledkem výrazu bude chyba v době kompilace.
Následující tabulka ukazuje chování léčby u některých typických vzorů a některých méně běžných vzorů. Všechny výjimky jsou vyvolány ze strany klienta před vyvolání zprostředkovatele:
Vzor | Chování |
---|---|
TREAT (null AS EntityType) |
Vrací objekt DbNull . |
TREAT (null AS ComplexType) |
Vyvolá výjimku. |
TREAT (null AS RowType) |
Vyvolá výjimku/ |
TREAT (EntityType AS EntityType) |
Vrátí EntityType nebo null . |
TREAT (ComplexType AS ComplexType) |
Vyvolá výjimku. |
TREAT (RowType AS RowType) |
Vyvolá výjimku. |
Příklad
Následující dotaz Entity SQL používá operátor TREAT k převodu objektu typu Course na kolekci objektů typu OnsiteCourse. Dotaz je založený na školním modelu.
SELECT VALUE TREAT (course AS SchoolModel.OnsiteCourse)
FROM SchoolEntities.Courses AS course
WHERE course IS OF( SchoolModel.OnsiteCourse)