Dela via


TREAT (entitets-SQL)

Behandlar ett objekt av en viss bastyp som ett objekt av den angivna härledda typen.

Syntax

TREAT ( expression as type)

Argument

expression Alla giltiga frågeuttryck som returnerar en entitet.

Kommentar

Typen av det angivna uttrycket måste vara en undertyp av den angivna datatypen, eller så måste datatypen vara en undertyp av uttryckstypen.

type En entitetstyp. Typen måste kvalificeras av ett namnområde.

Kommentar

Det angivna uttrycket måste vara en undertyp av den angivna datatypen, eller så måste datatypen vara en undertyp av uttrycket.

Returvärde

Ett värde för den angivna datatypen.

Kommentarer

TREAT används för att utföra uppsändning mellan relaterade klasser. Om Employee det till exempel härleds från Person och p är av typen Person, TREAT(p AS NamespaceName.Employee) upparbetas en allmän Person instans till Employee. Det innebär att du kan behandla p som Employee.

TREAT används i arvsscenarier där du kan göra en fråga som följande:

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

Den här frågan genererar entiteter Person till Employee typen. Om värdet för p faktiskt inte är av typen Employeeger uttrycket värdet null.

Kommentar

Det angivna uttrycket Employee måste vara en undertyp av den angivna datatypen Person, eller så måste datatypen vara en undertyp av uttrycket. Annars resulterar uttrycket i ett kompileringsfel.

I följande tabell visas beteendet för behandling över vissa typiska mönster och några mindre vanliga mönster. Alla undantag genereras från klientsidan innan providern anropas:

Mönster Funktionssätt
TREAT (null AS EntityType) Returnerar DbNull.
TREAT (null AS ComplexType) Utlöser ett undantag.
TREAT (null AS RowType) Genererar ett undantag/
TREAT (EntityType AS EntityType) Returnerar EntityType eller null.
TREAT (ComplexType AS ComplexType) Utlöser ett undantag.
TREAT (RowType AS RowType) Utlöser ett undantag.

Exempel

Följande entitets-SQL-fråga använder TREAT-operatorn för att konvertera ett objekt av typen Kurs till en samling objekt av typen OnsiteCourse. Frågan baseras på skolmodellen.

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

Se även