NAVIGATE (Entity SQL)
エンティティ間で確立されたリレーションシップをナビゲートします。
navigate(instance-expresssion, [relationship-type], [to-end [, from-end] ])
引数
- instance-expresssion
エンティティのインスタンス。
- relationship-type
概念スキーマ定義言語 (CSDL) ファイルで指定されたリレーションシップの種類の名前。relationship-type は、<名前空間>.<リレーションシップの種類の名前> の形式で修飾されています。
- to
リレーションシップの終端エンティティ。
- from
リレーションシップの開始エンティティ。
戻り値
終端の基数が 1 の場合、戻り値は Ref<T> になります。終端の基数が n の場合、戻り値は Collection<Ref<T>> になります。
解説
リレーションシップは、エンティティ データ モデル (EDM) における最上位の構造です。リレーションシップは、2 つ以上のエンティティ型間で確立され、ユーザーはエンティティ間のリレーションシップをナビゲートできます。from と to は、リレーションシップ内の名前解決があいまいでない場合の条件付きのオプションです。
NAVIGATE は、O および C 空間で有効です。
ナビゲーション構造の一般的な形式は次のようになります。
navigate(instance-expresssion, relationship-type, [ to-end [, from-end ] ] )
以下にサンプルを示します。
Select o.Id, navigate(o, OrderCustomer, Customer, Order)
From LOB.Orders as o
ここで、OrderCustomer は relationship であり、Customer と Order はリレーションシップの to-end (顧客) と from-end (注文) です。OrderCustomer が n:1 リレーションシップの場合、ナビゲーション式の結果型は Ref<Customer> となります。
この式をより簡略化すると、次のようになります。
Select o.Id, navigate(o, OrderCustomer)
From LOB.Orders as o
同様に、次の形式のクエリでは、ナビゲーション式によって Collection<Ref<Order>> が生成されます。
Select c.Id, navigate(c, OrderCustomer, Order, Customer)
From LOB.Customers as c
インスタンス式は、エンティティ/参照型になる必要があります。
例
次の Entity SQL クエリでは、NAVIGATE 演算子を使用して、Address エンティティ型と SalesOrderHeader エンティティ型間で確立されたリレーションシップをナビゲートします。このクエリは、AdventureWorks Sales Model に基づいています。このクエリをコンパイルして実行するには、次の手順を実行します。
「StructuralType 結果を返すクエリの実行方法 (EntityClient)」の手順に従います。
次のクエリを引数として
ExecuteStructuralTypeQuery
メソッドに渡します。
SELECT address.AddressID, (SELECT VALUE DEREF(soh)
FROM NAVIGATE(address, AdventureWorksModel.FK_SalesOrderHeader_Address_BillToAddressID) AS soh)
FROM AdventureWorksEntities.Address AS address
この例では次の出力が生成されます。
AddressID: 1
AddressID: 2
AddressID: 3
AddressID: 4
AddressID: 5
参照
リファレンス
概念
Entity SQL リファレンス
リレーションシップ ナビゲーション操作 (Entity SQL)
ナビゲーション プロパティ (EDM)