Ответ 1
Запрос, который вам нужно написать, зависит от мощности расширенной коллекции.
Вот несколько примеров использования общедоступного примера службы OData Northwind, предоставляемой odata.org.
Заказ всегда выполняется только одним клиентом.
Найти заказы, сделанные клиентом с конкретным именем: http://services.odata.org/V3/Northwind/Northwind.svc/Orders?$expand=Customer&$filter=Customer/CompanyName eq 'Vins et alcools Chevalier'. Это эквивалентно ответу Дхавала.
Клиент может сделать много заказов.
Используйте квантификаторы all или any, чтобы указать, хотите ли вы, чтобы хотя бы один или все приказы выполняли ваши условия.
- Найдите клиентов, для которых один или несколько заказов были обработаны конкретным сотрудником: http://services.odata.org/V3/Northwind/Northwind.svc/Customers?$expand=Orders&$filter=Orders/любой(o: o/EmployeeID eq 9)
- Найдите клиентов, которые давно ничего не заказывали: http://services.odata.org/V3/Northwind/Northwind.svc/Customers?$expand=Orders&$filter=Orders/все(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()
на самом деле являются универсальным квантификатором, ∀() и экзистенциальным квантификатором, ∃() соответственно, что вы, возможно, помните из математического класса ,