共用方式為


TREAT (Entity SQL)

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

TREAT ( expression as type)

引數

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

    Note附註

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

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

    Note附註

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

傳回值

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

備註

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

Note附註

所指定的運算式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)

擲回例外狀況。

範例

以下 實體 SQL 查詢使用 TREAT 運算子將 People 型別的物件轉換成 Student 型別的物件集合。 此查詢是以 School Entity Data Model 為依據。 如需如何產生此模型的相關資訊,請參閱產生 School Entity Data Model (Entity Framework 快速入門)

SELECT VALUE TREAT (people as SchoolDataLib.Student) 
    FROM SchoolDataEntities.People as people 
    WHERE people IS OF( SchoolDataLib.Student)

這個範例會產生下列輸出:

Chow
Haas
Hamilton
Adams
Paschke
Abrus
Hance

另請參閱

概念

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