エンティティ間で確立されたリレーションシップを移動します。
構文
navigate(instance-expression, [relationship-type], [to-end [, from-end] ])
論争
instance-expression エンティティのインスタンス。
relationship-type 概念スキーマ定義言語 (CSDL) ファイルからのリレーションシップの型名。
relationship-typeは、<namespace>.< として修飾されます。リレーションシップの種類名>。
to リレーションシップの末尾。
from リレーションシップの先頭。
戻り値
to end のカーディナリティが 1 の場合、戻り値は Ref<T>。 to end のカーディナリティが n の場合、戻り値は Collection<Ref<T>>されます。
注釈
リレーションシップは、エンティティ データ モデル (EDM) の最上位のコンストラクトです。 2 つ以上のエンティティ型間でリレーションシップを確立でき、ユーザーはリレーションシップをある端 (エンティティ) から別のエンティティに移動できます。
from リレーションシップ内の名前解決にあいまいさがない場合、 to は条件付きで省略可能です。
NAVIGATE は O および C スペースで有効です。
ナビゲーション コンストラクトの一般的な形式は次のとおりです。
navigate(instance-expression, 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
インスタンス式はエンティティ/ref 型である必要があります。
例
次の Entity SQL クエリでは、NAVIGATE 演算子を使用して、Address エンティティ型と SalesOrderHeader エンティティ型の間で確立されたリレーションシップを移動します。 このクエリは、AdventureWorks Sales Model に基づいています。 このクエリをコンパイルして実行するには、次の手順に従います。
方法 : StructuralType の結果を返すクエリを実行する手順に従います。
次のクエリを引数として
ExecuteStructuralTypeQueryメソッドに渡します。
SELECT address.AddressID, (SELECT VALUE DEREF(soh)
FROM NAVIGATE(address,
AdventureWorksModel.FK_SalesOrderHeader_Address_BillToAddressID)
AS soh)
FROM AdventureWorksEntities.Addresses AS address