TREAT (Entity SQL)
將特定基底類型的物件視為所指定衍生型別的物件。
TREAT ( expression as type)
Arguments
expression
任何傳回實體的有效查詢運算式。注意: 所指定運算式的型別必須是所指定資料型別的子型別,或者此資料型別必須是運算式之型別的子型別。
type
任何實體類型。 此型別必須以命名空間限定。注意: 所指定的運算式必須是所指定資料型別的子型別,或者此資料型別必須是此運算式的子型別。
傳回值
屬於所指定資料型別的值。
備註
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 在某些一般模式及一些較不常見的模式中的行為。 所有例外狀況都是在叫用提供者之前從用戶端擲回:
模式 | 行為 |
---|---|
|
傳回 DbNull。 |
|
擲回例外狀況。 |
|
擲回例外狀況。 |
|
傳回 EntityType 或 null。 |
|
擲回例外狀況。 |
|
擲回例外狀況。 |
範例
下列 Entity SQL 查詢使用 TREAT 運算子將 Course 型別的物件轉換成 OnsiteCourse 型別的物件集合。 此查詢是以 School 模型為基礎。
SELECT VALUE TREAT (course as SchoolModel.OnsiteCourse)
FROM SchoolEntities.Courses as course
WHERE course IS OF( SchoolModel.OnsiteCourse)