TREAT (Entity SQL)

將特定基底類型的物件視為所指定之衍生型別的物件。

語法

TREAT ( expression as type)

引數

expression:任何會傳回實體的有效查詢運算式。

注意

所指定運算式的型別必須是所指定資料型別的子型別,或者此資料型別必須是運算式之型別的子型別。

type:任何實體類型。 此型別必須以命名空間 (Namespace) 限定。

注意

所指定的運算式必須是所指定資料型別的子型別,或者此資料型別必須是此運算式的子型別。

傳回值

屬於所指定資料型別的值。

備註

TREAT 是用來在兩個相關類別之間執行向上轉型。 舉例來講,假設 Employee 是衍生自 Person 而 p 是 Person型別,則 TREAT(p AS NamespaceName.Employee) 會將泛型 Person 執行個體向上轉型成為 Employee;換言之,它可以讓您將 p 視為 Employee

TREAT 是使用於繼承的情況下,在這種情況下您可以執行類似下列的查詢:

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

這個查詢將 Person 實體向上轉型成為 Employee 型別。 如果 p 的值實際上不是 Employee型別,此運算式將會產生值 null

注意

所指定的運算式 Employee 必須是所指定資料類型 Person 的子類型,或者該資料類型必須是該運算式的子類型。 否則此運算式將會造成編譯時期錯誤。

下表所示為 TREAT 在某些一般模式及一些較不常見的模式中的行為。 所有例外狀況都是在叫用提供者之前從用戶端擲回:

模式 行為
TREAT (null AS EntityType) 傳回 DbNull
TREAT (null AS ComplexType) 擲回例外狀況。
TREAT (null AS RowType) 擲回例外狀況。
TREAT (EntityType AS EntityType) 傳回 EntityTypenull
TREAT (ComplexType AS ComplexType) 擲回例外狀況。
TREAT (RowType AS RowType) 擲回例外狀況。

範例

下列 Entity SQL 查詢使用了 TREAT 運算子將類型為 Course 的物件轉換為類型為 OnsiteCourse 的物件集合。 此查詢是以 School Model為基礎。

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

另請參閱