Фильтр по 2 условиям, включая дату, когда не работает Microsoft Graph SDK

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

GraphServiceClient client = GetAuthenticatedClient();

string subject = "RE: ACTION NEEDED:";
string dt = "2018-10-5T00:00:00Z";
IUserMessagesCollectionPage msgs =
    client
    .Users["[email protected]"]
    .Messages.Request()
    //.Filter($"receivedDateTime gt {dt}")  // invalid filter
    .Filter($"startswith(subject, '{subject}') and receivedDateTime gt {dt}")
    .Select(m => new { m.Subject, m.ReceivedDateTime, m.From, m.Body })
    .Top(100)
    .GetAsync().Result;
int msgCnt = msgs.Count;

Console.WriteLine($"Message count: {msgCnt}");
Console.ReadLine();

2 вопроса:

  1. Я хочу, чтобы этот фильтр работал:

    .Filter($"startswith(subject, '{subject}') and receivedDateTime gt {dt}")
    

startswith работает сам по себе, но с фильтром даты он ошибается.

  1. Я попробовал фильтр даты сам по себе, но он не работает. Я получаю недействительный фильтр. Я добавил одинарные кавычки вокруг даты, но безуспешно.

    .Filter($"receivedDateTime gt {dt}")  // Get invalid filter
    

Любые идеи?


person user2970483    schedule 07.10.2018    source источник


Ответы (2)


Часто поддерживается строковый оператор startwith. Некоторые API-интерфейсы поддерживают лямбда-оператор any. Примеры использования см. В следующей таблице. Дополнительные сведения о синтаксисе $ filter см. В протоколе OData.

https://developer.microsoft.com/en-us/graph/docs/concepts/query_parameters

Не все параметры запроса поддерживаются всеми Graph API.

Основываясь на сообщении Марка, обновите и мой ответ: если вы хотите использовать DateTime в качестве параметра запроса для фильтрации почты, вы должны использовать один из следующих API для сообщений:

https://graph.microsoft.com/v1.0/me/mailFolders/inbox/messages?$filter=ReceivedDateTime ge 2018-10-01 and startswith(subject,'{subject}')

Or

https://graph.microsoft.com/v1.0/me/messages?$filter=ReceivedDateTime ge 2018-10-1 and startswith(subject,'{subject}')

Если вы хотите добавить дату (2018-10-01) к времени (T04: 16: 35Z) ,, вам следует использовать следующий формат:

2018-10-05T04:16:35Z(yyyy-mm-ddThh:mm:ssZ)

Если вы просто используете дату без времени, вы можете использовать следующий формат:

2018-10-5(yyyy-mm-d) or 2018-10-05(yyyy-mm-dd)
person Seiya Su    schedule 08.10.2018
comment
Месяц - это заглавная буква M, так что это должно быть (гггг-ММ-ддТчч: мм: ссZ). - person emaurer; 05.02.2021

Вы используете неправильную дату. В значении 2018-10-5T00:00:00Z отсутствует 0. В частности, день должен быть 05, а не 5:

 string dt = "2018-10-05T00:00:00Z";
person Marc LaFleur    schedule 08.10.2018