NAVIGATE (Entity SQL)
导航实体之间建立的关系。
语法
navigate(instance-expression, [relationship-type], [to-end [, from-end] ])
自变量
instance-expression
一个实体的实例。
relationship-type
关系的类型名称,取自概念架构定义语言 (CSDL) 文件。 relationship-type
限定为 <namespace>.<relationship type name>。
to
关系的结束端。
from
关系的起始端。
返回值
如果结束端的基数为 1,返回值将为 Ref<T>
。 如果结束端的基数为 n,返回值将为 Collection<Ref<T>>
。
备注
关系是实体数据模型 (EDM) 中的一类构造。 可以在两个或更多实体类型之间建立关系,用户可以通过关系从一端(实体)导航到另一端。 当关系中的名称解析没有歧义时,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
实例表达式必须为 entity/ref 类型。
示例
下面的 Entity SQL 查询使用 NAVIGATE 运算符来导航建立在 Address 和 SalesOrderHeader 实体类型之间的关系。 此查询基于 AdventureWorks 销售模型。 若要编译并运行此查询,请执行下列步骤:
执行 How to: Execute a Query that Returns StructuralType Results中的过程。
将以下查询作为参数传递给
ExecuteStructuralTypeQuery
方法:
SELECT address.AddressID, (SELECT VALUE DEREF(soh)
FROM NAVIGATE(address,
AdventureWorksModel.FK_SalesOrderHeader_Address_BillToAddressID)
AS soh)
FROM AdventureWorksEntities.Addresses AS address