Примечание: Я знаю, что это старый, но все еще отображается в ответах на поиск.В настоящее время существует хорошее решение этой проблемы.
В OData v4 существует поддержка $ apply , среди прочего, $apply
может использоваться для возврата отличногонабор полей из набора результатов.
См. соответствующее обсуждение: Применение Distinct к ODataQuery
из спецификации OData v4 ,
Опция запроса $apply
принимает последовательность преобразований множества, разделенных прямой косой чертой, чтобы выразить, что они применяются последовательно, например, результатом каждого преобразования является входное значение для следующего преобразования $ apply - функция, для которой требуется
tl; dr;
В основном, если у меня есть таблица, которая имеет много полей, но я хочу вернуть только отдельные записи ряда определенных полей, первый шагчтобы идентифицировать отдельные столбцы, давайте назовем их Name
и Id
.
Просто используйте функцию $apply
, чтобы получить отдельный набор результатов, содержащий только столбцы Names и Id с синтаксисом, подобным этому:
http://url.to/tableresource?$apply=groupby((Name,Id))
Давайте сделаем это на примере, TuberInspections
имеет 1000 строк, но только несколько подрядчиков, я хочу отобразить имена подрядчиков в раскрывающемся списке для использования в запросе фильтрации.
Мои отдельные столбцы: ContractorName
и ContractorId
GET /odata/TuberInspections?$apply=groupby((ContractorName,ContractorId)) HTTP/1.1
Host: localhost:1230
Response:
{
"@odata.context": "http://localhost:1230/odata/$metadata#TuberInspections(ContractorName,ContractorId)",
"value": [
{
"@odata.id": null,
"ContractorId": 11534,
"ContractorName": "Kermit d'Frog"
},
{
"@odata.id": null,
"ContractorId": 11539,
"ContractorName": "Carlos Spicy Wiener"
},
{
"@odata.id": null,
"ContractorId": 16827,
"ContractorName": "Jen Gelfling"
}
]
}
Если ваша структура данных недостаточно плоская, поддержка OOTB ограничена для извлечения простых вложенных структур результатов, в настоящее время толькоЕдиный путь навигации поддерживается со следующим синтаксисом.Приведенный выше запрос также можно записать в виде:
GET /odata/TuberInspections?$apply=groupby((Contractor/EntityID,Contractor/Initials))
Host: localhost:1230
Response:
{
"@odata.context": "http://localhost:1230/odata/$metadata#TuberInspections(Contractor(EntityID,Initials))",
"@odata.count": 3,
"value": [
{
"@odata.id": null,
"Contractor": {
"@odata.id": null,
"Initials": "KdF",
"EntityID": 11534
}
},
{
"@odata.id": null,
"Contractor": {
"@odata.id": null,
"Initials": "SW",
"EntityID": 11539
}
},
{
"@odata.id": null,
"Contractor": {
"@odata.id": null,
"Initials": "Jen",
"EntityID": 16827
}
}
]
}
Существуют более сложные (сложные) варианты вложенных или суммированных преобразований $apply
, которые включают возвращение количества уникальных строк, соответствующих каждой изотличные результаты.
Для получения дополнительной информации, пожалуйста, отправьте конкретные вопросы и пометьте OData-v4, и вы найдете всю необходимую вам помощь:)