NAVIGATE (Entity SQL)
Производит переход по связи, установленной между сущностями.
Синтаксис
navigate(instance-expression, [relationship-type], [to-end [, from-end] ])
Аргументы
instance-expression
Экземпляр сущности.
relationship-type
Имя типа связи из файла языка определения концептуальной схемы (CSDL). Это relationship-type
имя является <пространством> имен.<имя> типа связи.
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
(customer) и from-end
(order). Если OrderCustomer был связью n:1, результатом выражения навигации является Ref<Customer>.
Для этого выражение существует следующая упрощенная форма.
Select o.Id, navigate(o, OrderCustomer)
From LOB.Orders as o
Аналогичным образом в запросе следующей формы выражение навигации создаст порядок>> ссылок<коллекции<.
Select c.Id, navigate(c, OrderCustomer, Order, Customer)
From LOB.Customers as c
Выражение экземпляра должно иметь тип сущности или ссылки.
Пример
В следующем запросе Entity SQL оператор NAVIGATE используется для перехода по связи, заданной между типами сущностей Address и SalesOrderHeader. Запрос основан на модели AdventureWorks Sales. Для компиляции и запуска этого запроса выполните следующие шаги.
Выполните процедуру из статьи 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