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 Personnebo 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)

Viz také