2016-09-26 74 views
1

我有一段代码使用DASL查询来查询保存在RDOFolder中的项目的用户属性中的值,如下所示: rdoFolder.Items.Find("\"http://schemas.microsoft.com/mapi/string/{00020329-0000-0000-C000-000000000046}/MyUserPropertyName/0x0000001F\"='queryValue'" 但是,现在我需要迁移数据保存在我的用户属性中的RDOMail项目的Field属性。我想知道是否有类似的方式来查询此Field属性的快速性能。当有数以万计的项目时,循环浏览文件夹中的所有项目以进行值比较可能会非常缓慢。在Outlook中查询“字段”RDOMail对象

回答

0

我发现RDOFolder.Items.Find方法还搜索通过RDOMail.Fields索引属性保存的值。就像德米特里在评论中所说的那样。

例如,如果我这样设置值:

myRdoMail.Fields["http://schemas.microsoft.com/mapi/string/{8d736f90-8f45-4591-81aa-c85a98f1261b}/MyUserProperty"] = "MyValue"; 

然后我就可以通过执行以下操作找到此文件:

var result = myRdoFolder.Items.Find("\"http://schemas.microsoft.com/mapi/string/{8d736f90-8f45-4591-81aa-c85a98f1261b}/MyUserProperty\"='MyValue'"); 
0

您可以将相同的DASL名称传递给RDOMail.Fields索引属性。

+0

我有一个类似的问题。你的意思是你可以这样做:'rdoMail.Fields [“\”http://schemas.microsoft.com/mapi/string/ {00020329-0000-0000-C000-000000000046}/MyUserPropertyName/0x0000001F \“ = 'queryValue'“]'?即使你可以这样做,代码是否仍然需要遍历特定文件夹中的所有项目,并对每个项目的所有字段执行上述查询? –

+1

您可以执行'rdoMail.Fields [“http://schemas.microsoft.com/mapi/string/ {00020329-0000-0000-C 000-000000000046}/My UserPropertyName/0x0 000001F”]' 。既然这个问题是关于一个特定的RDOMail对象,是的,它必须首先打开。如果您想在单个调用中查询多个项目,则可以使用RDOFolder.Items.Find/FindNext/Restrict或ExecSQL。 –