EWS получает количество непрочитанных писем из всех папок

пытаюсь получить количество непрочитанных писем от Exchange для конкретного пользователя.

Я могу получить количество писем из Inbox, например, так:

SearchFilter sf = new SearchFilter.SearchFilterCollection(LogicalOperator.And, new SearchFilter.IsEqualTo(EmailMessageSchema.IsRead, false));
ItemView view = new ItemView(int.MaxValue);
FindItemsResults findResults = service.FindItems(WellKnownFolderName.Inbox, sf, view);
int unreadCount = 0;
foreach (EmailMessage i in findResults)
    {
        unreadCount++;
    }
label1.Text = unreadCount.ToString();

Это прекрасно работает.

Я также могу получить все подпапки Входящие:

FindFoldersResults findResults1 = service.FindFolders(
    WellKnownFolderName.Inbox,
    new FolderView(int.MaxValue) { Traversal = FolderTraversal.Deep });

foreach (Folder folder in findResults1.Folders)
{
    Console.WriteLine(folder.DisplayName);
}

Проблема в том, что яЯ не в состоянии объединить эти два вместе.

Я знаю, что могу делать вложенный цикл foreach, но я бы хотел этого избежать.

Я нашел эти вопросы:FindItems веб-служб Exchange (EWS) во всех папках, но это требует, по крайней мере, использовать Outlook 2010 для созданияAllItems папка.

Я знаю, что я могу создатьSearchFilterCollection, но как добавить в него правила, чтобы он выполнял поиск непрочитанных писем в папке «Входящие» и во всех подпапках?

РЕДАКТИРОВАТЬ:

Это то, что я пытался сделать до сих пор:

private int getEmailCount()
{
    int unreadCount = 0;

    FolderView viewFolders = new FolderView(int.MaxValue) { Traversal = FolderTraversal.Deep, PropertySet = new PropertySet(BasePropertySet.IdOnly) };
    ItemView viewEmails = new ItemView(int.MaxValue) { PropertySet = new PropertySet(BasePropertySet.IdOnly) };
    SearchFilter unreadFilter = new SearchFilter.SearchFilterCollection(LogicalOperator.And, new SearchFilter.IsEqualTo(EmailMessageSchema.IsRead, false));

    FindItemsResults findResults = service.FindItems(WellKnownFolderName.Inbox, unreadFilter, viewEmails);
    unreadCount += findResults.Count();

    FindFoldersResults inboxFolders = service.FindFolders(WellKnownFolderName.Inbox, viewFolders);

    foreach (Folder folder in inboxFolders.Folders)
    {
        findResults = service.FindItems(folder.Id, unreadFilter, viewEmails);
        unreadCount += findResults.Count();
    }

    return unreadCount;
    }

В основном это работает, но когда я создал несколько подпапок, он начал работать очень медленно.

Вместо нескольких запросов я могу сделать один, чтобы получить одинаковые результаты?

Ответы на вопрос(4)

Ваш ответ на вопрос