Выберите отдельные значения с оддаты - PullRequest
24 голосов
/ 01 октября 2010

Я пытаюсь создать вызов веб-службы odata, который бы выбирал только отдельные значения некоторого свойства. Есть ли хороший пример того, как это сделать?

Ответы [ 2 ]

29 голосов
/ 01 октября 2010

В настоящее время протокол OData не поддерживает отдельный оператор или любой другой оператор, который мог бы помочь с таким запросом (при условии, что вы ищете отдельные значения примитивного свойства некоторой сущности).Вы должны быть в состоянии обойти это путем реализации сервисной операции на сервере, который выполняет такой запрос на базовом поставщике, который обычно имеет такую ​​возможность.И тогда клиент может вызвать эту сервисную операцию вместо этого.

2 голосов
/ 25 января 2019

Примечание: Я знаю, что это старый, но все еще отображается в ответах на поиск.В настоящее время существует хорошее решение этой проблемы.

В 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, и вы найдете всю необходимую вам помощь:)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...