EWS erhält die Anzahl der ungelesenen E-Mails aus allen Ordnern

Ich versuche, die Anzahl der ungelesenen E-Mails von Exchange für einen bestimmten Benutzer abzurufen.

Ich kann die folgende Anzahl von E-Mails aus dem Posteingang abrufen:

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

Das funktioniert super.
Ich kann auch alle Unterordner im Posteingang bekommen:

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

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

Das Problem ist, dass ich diese beiden nicht miteinander kombinieren kann.
Ich weiß, dass ich verschachtelte foreach-Schleifen ausführen kann, aber das möchte ich vermeiden.

Ich habe diese Frage gefunden:FindItems für Exchange-Webdienste (EWS) in allen OrdnernZum Erstellen muss jedoch mindestens Outlook 2010 verwendet werdenAllItems Mappe.

Ich weiß, dass ich schaffen kannSearchFilterCollection, aber wie füge ich Regeln hinzu, damit im Posteingang und in allen Unterordnern nach ungelesenen E-Mails gesucht wird?

BEARBEITEN:

Das habe ich bisher versucht:

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<Item> 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;
    }

Grundsätzlich funktioniert dies, aber wenn ich mehrere Unterordner erstellt habe, begann es sehr langsam zu arbeiten.
Kann ich anstelle mehrerer Abfragen eine Abfrage durchführen, um dieselben Ergebnisse zu erzielen?

Antworten auf die Frage(4)

Ihre Antwort auf die Frage