Запрос, который вам нужно написать, зависит от мощности расширенной коллекции.
Вот несколько примеров, в которых используется общедоступный пример службы OData Northwind, предоставляемой odata.org .
Заказ всегда выполняется только одним клиентом.
Найти заказы, сделанные клиентом с конкретным именем: http://services.odata.org/V3/Northwind/Northwind.svc/Orders?$expand=Customer&$filter=Customer/CompanyName eq 'Vins et alcools Chevalier' .Это эквивалентно ответу Дхавала.
Клиент может выпустить много заказов.
Использовать квантификаторы все или any , чтобы указать, хотите ли вы, чтобы хотя бы один или все заказы выполняли ваши условия.
- Поиск клиентов, для которых один или несколько заказов были обработаны определеннымсотрудник: http://services.odata.org/V3/Northwind/Northwind.svc/Customers?$expand=Orders&$filter=Orders/any(o: o / EmployeeID eq 9)
- Найти клиентов, которые давно ничего не заказывали: http://services.odata.org/V3/Northwind/Northwind.svc/Customers?$expand=Orders&$filter=Orders/all(o: o / OrderDate lt DateTime'1997-01-01 ')
Вы можете позвонить http://services.odata.org/V3/Northwind/Northwind.svc/$metadata и проверить элементы NavigationProperty, чтобы увидеть, какие отношения существуют.
<NavigationProperty Name="Orders"
Relationship="NorthwindModel.FK_Orders_Customers"
ToRole="Orders"
FromRole="Customers"/>
Затем посмотритедля ассоциации с этим именем вы найдете кардинальное число:
<Association Name="FK_Orders_Customers">
<End
Type="NorthwindModel.Customer"
Role="Customers"
Multiplicity="0..1"/>
<End
Type="NorthwindModel.Order"
Role="Orders"
Multiplicity="*"/>
...
Навигация отношения один-ко-многим, как это: http://services.odata.org/V3/Northwind/Northwind.svc/Customers?$expand=Orders&$filter=Orders/EmployeeID eq 9 , даст вам: "Родительское значение для доступа к свойству свойства EmployeeID не является единственным значением. Доступ к свойству может применяться толькок одному значению. "
Навигация отношения" многие к одному "со всеми или с любыми, например http://services.odata.org/V3/Northwind/Northwind.svc/Orders?$expand=Customer&$filter=Customer/any(c: c / CompanyName eq 'Vins et alcools Chevalier') ,даст вам: «Любой / Все могут использоваться только после коллекции.»
Кстати, all()
и any()
на самом деле Универсальный квантификатор , ∀ () и экзистенциальный квантификатор , ∃ () соответственно, который вы, возможно, помните из математического класса.