Фильтр на 2 условия, включая дату, не работает с Microsoft Graph SDK - PullRequest
0 голосов
/ 07 октября 2018

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

GraphServiceClient client = GetAuthenticatedClient();

string subject = "RE: ACTION NEEDED:";
string dt = "2018-10-5T00:00:00Z";
IUserMessagesCollectionPage msgs =
    client
    .Users["UserName@CompanyName.com"]
    .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 работает сам по себе, но с фильтром даты он ошибается.

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

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

Есть идеи?

Ответы [ 2 ]

0 голосов
/ 08 октября 2018

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

 string dt = "2018-10-05T00:00:00Z";
0 голосов
/ 08 октября 2018

Стартовый оператор stringwith часто поддерживается.Любой лямбда-оператор поддерживается для некоторых API.Некоторые примеры использования см. В следующей таблице.Подробнее о синтаксисе $ filter см. В протоколе OData.

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

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

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

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

Или

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)
...