TREAT (Entity SQL)

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

TREAT ( expression as type)

Arguments

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

    Bb387106.note(zh-tw,VS.100).gif注意:
    所指定運算式的型別必須是所指定資料型別的子型別,或者此資料型別必須是運算式之型別的子型別。

  • type
    任何實體類型。 此型別必須以命名空間限定。

    Bb387106.note(zh-tw,VS.100).gif注意:
    所指定的運算式必須是所指定資料型別的子型別,或者此資料型別必須是此運算式的子型別。

傳回值

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

備註

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

Bb387106.note(zh-tw,VS.100).gif注意:
所指定的運算式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 模型為基礎。

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

另請參閱

概念

Entity SQL 參考
可為 Null 的結構化型別 (Entity SQL)