TREAT (Entity SQL)

特定の基本データ型のオブジェクトを指定の派生型のオブジェクトとして処理します。

TREAT ( expression as type)

引数

  • expression
    エンティティを返す任意の有効なクエリ式。

    [!メモ]

    指定の式の型は、特定のデータ型のサブタイプである必要があります。または、データ型は式の型のサブタイプである必要があります。

  • type
    エンティティ型。型は名前空間で修飾する必要があります。

    [!メモ]

    指定の式は、特定のデータ型のサブタイプである必要があります。または、データ型は式のサブタイプである必要があります。

戻り値

指定されたデータ型の値。

解説

TREAT は関連クラス間でキャストを実行するために使用します。たとえば、EmployeePerson から派生し、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 演算子を使用して、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)