使用比较运算符在Outlook C#中创建自定义字段筛选器

时间:2019-07-19 13:54:11

标签: outlook vsto outlook-addin

我创建了一个过滤器,用于比较自定义用户属性的值,并仅显示符合要求的电子邮件。

当我有=比较值时,过滤器起作用,但当我有<=运算符时,过滤器不起作用。

下面是我的过滤器。 这行得通。

string filter= $"@SQL=\"http://schemas.microsoft.com/mapi/string/{{00020329-0000-0000-C000-000000000046}}/TimeSpent/0000001f\" = '60'"; 
Outlook.Items restrictedMails = selectedFolder.Items.Restrict(filter);

这行不通。

string filter= $"@SQL=\"http://schemas.microsoft.com/mapi/string/{{00020329-0000-0000-C000-000000000046}}/TimeSpent/0000001f\" <= '60'"; 
Outlook.Items restrictedMails = selectedFolder.Items.Restrict(filter);

在自定义文件中保存值的代码如下。

int duration = (int)completed.Subtract(received).TotalMinutes;
try
                {
                    MailUserProperties = SelectedMail.UserProperties;
                    MailUserProperty = MailUserProperties.Add("TimeSpent", Outlook.OlUserPropertyType.olText, true, 1);
                    MailUserProperty.Value = duration;
                    SelectedMail.Save();
                }

有人可以在这里帮助如何使过滤器正常工作吗?

谢谢。

1 个答案:

答案 0 :(得分:1)

 string filter= $"@SQL=\"http://schemas.microsoft.com/mapi/string/{{00020329-0000-0000-C000-000000000046}}/TimeSpent/0000001f\" = '60'";

此处60不是数字,而是字符串。因此,基本上,比较了两个字符串。

 MailUserProperty = MailUserProperties.Add("TimeSpent", Outlook.OlUserPropertyType.olText, true, 1);

您添加字符串用户属性,然后要应用比较器。仅对整数值有意义。因此,代码应类似于以下代码:

 MailUserProperty = MailUserProperties.Add("TimeSpent", Outlook.OlUserPropertyType.olInteger, true, 1);

只有这样,您才可以尝试使用以下过滤器:

 string filter= $"@SQL=\"http://schemas.microsoft.com/mapi/string/{{00020329-0000-0000-C000-000000000046}}/TimeSpent/0000001f\" <= 60";