Есть ли способ фильтрации по количеству вложенных элементов массива при использовании OData Query?

Я использую Microsoft Graph List CalendarView, чтобы получить события календаря из внешнего вида. Я хотел бы отфильтровать элементы, количество посетителей которых равно 0. (Логически это означает, что время для себя заблокировано).

Я понимаю, что есть параметр $ count, который будет возвращать количество элементов. Тем не менее, в ответе List CalendarView я не после количества элементов календаря, а количество посетителей в каждом элементе календаря. И на самом деле использовать не равный (ne) фильтр на его основе.

{
  "value": [
    {
      "originalStartTimeZone": "originalStartTimeZone-value",
      "originalEndTimeZone": "originalEndTimeZone-value",
      "iCalUId": "iCalUId-value",
      "reminderMinutesBeforeStart": 99,
      "isReminderOn": true,
      "attendees":[
            {
                "type":"required",
                "status":{
                    "response":"none",
                    "time":"0001-01-01T00:00:00Z"
                },
                "emailAddress":{
                    "name":"Samantha Booth",
                    "address":"samanthab@a830edad905084922E17020313.onmicrosoft.com"
                }
            },
            {
                "type":"required",
                "status":{
                    "response":"none",
                    "time":"0001-01-01T00:00:00Z"
                },
                "emailAddress":{
                    "name":"Dana Swope",
                    "address":"danas@a830edad905084922E17020313.onmicrosoft.com"
                }
            }
        ]
    }
  ]
}

Я хочу специально отфильтровать любые элементы событий, где размер массива "участников" равен 0.

Возможно ли это с помощью параметров запроса OData?

0 ответов

Похоже, фильтрация против attendees свойство не поддерживается, подробности см., например, в этой теме. Но можно рассмотреть следующий подход:

а) ввести расширенное свойство для event ресурс, который будет предоставлять сводную информацию (флаг, будет ли событие содержать посетителей или количество посетителей) о attendees,

Обновите все существующие события:

PATCH https://graph.microsoft.com/v1.0/me/events/{event-id}
Content-Type: application/json
{
  "singleValueExtendedProperties": [
      {
         "id":"String {66f5a359-4659-4830-9070-00047ec6ac6e} Name ContainsAttendes",
         "value":"1"
      }
    ]
}

б) теперь события могут быть отфильтрованы так:

https://graph.microsoft.com/beta/me/events?$filter=singleValueExtendedProperties/Any(ep: ep/id eq 'String {66f5a359-4659-4830-9070-00047ec6ac6e} Name ContainsAttendes' and ep/value eq '1')

где предполагается ContainsAttendes=1 соответствует событиям, в которых участвует один или несколько участников

Другие вопросы по тегам