TREAT (Entity SQL)
特定の基本データ型のオブジェクトを指定の派生型のオブジェクトとして処理します。
TREAT ( expression as type)
引数
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)