Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/306.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在处理C#Outlook之前按接收时间对电子邮件进行排序_C#_Sorting_Date_Outlook - Fatal编程技术网

在处理C#Outlook之前按接收时间对电子邮件进行排序

在处理C#Outlook之前按接收时间对电子邮件进行排序,c#,sorting,date,outlook,C#,Sorting,Date,Outlook,我需要在处理电子邮件并将数据输入数据库之前,按收到的时间对电子邮件进行排序 我需要它,以便将收到的最新电子邮件放入数据库以覆盖旧版本(如果有旧版本) Microsoft.Office.Interop.Outlook.Items item=(Outlook.Items)source.Items Source是一个文件夹,里面有我想要排序的电子邮件 我试过以下四种方法: items.Sort("ReceivedTime", false); items.

我需要在处理电子邮件并将数据输入数据库之前,按收到的时间对电子邮件进行排序

我需要它,以便将收到的最新电子邮件放入数据库以覆盖旧版本(如果有旧版本)


Microsoft.Office.Interop.Outlook.Items item=(Outlook.Items)source.Items

Source是一个文件夹,里面有我想要排序的电子邮件

我试过以下四种方法:

            items.Sort("ReceivedTime", false);
            items.Sort("[ReceivedTime]", Outlook.OlSortOrder.olAscending);
            items.Sort("ReceivedTime", Outlook.OlSortOrder.olSortNone);
            items.Sort("[ReceivedTime]");
它似乎没有对它进行排序,因为它仍然将最旧的文件放在数据库中,然后覆盖最新提交的文件


有什么想法吗?

现在我不知道您的item对象是什么类,但可能“Sort”-方法没有返回类型“void”,但它本身返回一个新列表

因此,您应该这样分配您的列表:

items = items.Sort();
然后,您可以尝试四种方法中的哪一种适合您的需要。 我希望这有帮助

应该是

items.Sort("[ReceivedTime]", false);

或者
true
如果你想让它们下降

我花了很多时间试图解决同样的问题

Microsoft Interop.outlook中似乎存在某种缺陷,如果您直接尝试从文件夹中排序,则根本不起作用

要使其工作,您必须将它们复制到不同的列表中,然后进行排序。下面的示例将起作用

Outlook.Application app=新建Outlook.Application();
Outlook.NameSpace outlookNs=app.GetNamespace(“MAPI”);

Outlook.MAPIFolder emailFolder=outlookNs.GetDefaultFolder(Microsoft.Office.Interop.Outlook.OlDefaultFolders.olFolderInbox); Outlook.Items myItems=emailFolder.Items; 排序(“[ReceivedTime]”,false); foreach(myItems中的var项) { var itemObj=作为邮件项目的项目; if(itemObj!=null) { //这一次它会起作用 } }

此代码来自MSDN。我不明白为什么一开始它会设置
myItmes=myFolder.Items
。经过多次尝试,我知道这是一个陷阱。如果使用
myFolder.Items.sort
。。。直接而言,排序功能不起作用

Microsoft.Office.Interop.Outlook.Items item=(Outlook.Items)source.Items;Source是一个文件夹,里面有我想要排序的电子邮件。因此,这将无法工作,因为排序需要参数。在Items对象的一个实例上调用'inboxFolder.Items.Sort',然后通过不同对象的项循环('foreach(inboxFolder.Items中的var item')。将inboxFolder.Items的值存储在单独的变量中,对其调用Sort,然后循环遍历其元素。正确。我也是这么想的。请去掉那些固执己见的评论,直接回答问题好吗?

Microsoft.Office.Interop.Outlook.Application app = new Microsoft.Office.Interop.Outlook.Application(); Microsoft.Office.Interop.Outlook._NameSpace ns = app.GetNamespace("MAPI"); Microsoft.Office.Interop.Outlook.MAPIFolder inboxFolder = null; inboxFolder = ns.GetDefaultFolder(Microsoft.Office.Interop.Outlook.OlDefaultFolders.olFolderInbox);

        inboxFolder.Items.Sort("[ReceivedTime]", false);
        foreach (var item in inboxFolder.Items)
        {
            // ITEMS ARE NOT SORTED
        }
Sub SortByDueDate() 
 Dim myNameSpace As Outlook.NameSpace 
 Dim myFolder As Outlook.Folder 
 Dim myItem As Outlook.TaskItem 
 Dim myItems As Outlook.Items 

 Set myNameSpace = Application.GetNamespace("MAPI") 
 Set myFolder = myNameSpace.GetDefaultFolder(olFolderTasks) 
 Set myItems = myFolder.Items 
 myItems.Sort "[DueDate]", False 
 For Each myItem In myItems 
 MsgBox myItem.Subject &; "-- " &; myItem.DueDate 
 Next myItem 
End Sub