2

I have stumbled upon a problem where the Outlook items table sort method does not give desired results - despite the ascending or descending the method GetLast() always returns the same email item. Code as follows:

Application olApp = new Application();
NameSpace olNS = olApp.GetNamespace("MAPI");
MAPIFolder oFolder = olNS.GetDefaultFolder(OlDefaultFolders.olFolderInbox);

Explorer oExp = oFolder.GetExplorer(false);
//olNS.Logon( false, true);

result = new IOActionResult(null);

oFolder.Items.Sort("[ReceivedTime]");

var subject = oFolder.Items.GetLast().Subject;

I have tried specifying following:

oFolder.Items.Sort("[ReceivedTime]", true);
oFolder.Items.Sort("[ReceivedTime]", false);
oFolder.Items.Sort("[ReceivedTime]", OlSortOrder.olAscending);
oFolder.Items.Sort("[ReceivedTime]", OlSortOrder.olDescending);

Which did not seem to work either... Any thoughts appreciated!

Alexis Pigeon
  • 7,423
  • 11
  • 39
  • 44
VidasV
  • 4,335
  • 1
  • 28
  • 50

1 Answers1

2

On your last line;

var subject = oFolder.Items.GetLast().Subject;

You are being returned a new Items object from Outlook, so your sort was actually performed on an instance that you no longer have a reference to.

Change your code to look like this;

Application  olApp = new Application();
NameSpace olNS = olApp.GetNamespace("MAPI");
MAPIFolder oFolder = olNS.GetDefaultFolder(OlDefaultFolders.olFolderInbox);

Items items = oFolder.Items;
items.Sort("[ReceivedTime]");

var subject = items.GetLast().Subject;

A good rule of thumb when developing against Outlook is to always assign intermediary members of objects to their own local variable. This is particular relevant for releasing them later on.

Chris McAtackney
  • 5,192
  • 8
  • 45
  • 69
  • Thank you very much. You have brackets on Subject property in the last line, might want to remove those not to confuse others. – VidasV Aug 21 '13 at 06:08