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) |
傳回 EntityType 或 null 。 |
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)