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 (сущностная модель данных) . Связи могут устанавливаться между двумя или несколькими типами сущностей, а пользователи могут переходить по связи от одного элемента (от одной сущности) к другому. 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 (customer) и from-end (order). Если 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. Для компиляции и запуска этого запроса выполните следующие шаги.
Следуйте инструкциям в разделе Как выполнить запрос, возвращающий результаты типа StructuralType (EntityClient).
Передайте следующий запрос в качестве аргумента методу
ExecuteStructuralTypeQuery
:
SELECT address.AddressID, (SELECT VALUE DEREF(soh)
FROM NAVIGATE(address, AdventureWorksModel.FK_SalesOrderHeader_Address_BillToAddressID) AS soh)
FROM AdventureWorksEntities.Addresses AS address