如何在C#中的单个DASL过滤器查询中使用多个条件? (语法)(用于advancedSearch()方法)

时间:2018-09-25 16:47:09

标签: c# outlook vsto outlook-addin add-in

屏幕截图1: screenshot 1

屏幕截图2: screenshot 2

背景:

当前,我正在VSTO加载项中搜索电子邮件主题中的单词。我的语法是:

string filter = "urn:schemas:mailheader:subject LIKE \'%" + wordInSubject + "%\'";

即使以下语法也可以工作:

string filter = String.Format("\"urn:schemas:mailheader:subject\" >= '{0}'", "ticket");

string filter = String.Format("@SQL=(\"urn:schemas:calendar:dtstart\" >= '{0:g}' " + "AND \"urn:schemas:calendar:dtend\" <= '{1:g}' " + "AND \"urn:schemas:mailheader:subject\" LIKE '%{2}%')", startTime, endTime, wordInSubject);

但是,我还想包括邮件在时间范围之间的DateTime比较。

REASEARCH链接:

doc for multiple conditions

doc with VB syntax

我尝试了以下方法,但是它们不起作用:

string filter = ("urn:schemas:mailheader:subject LIKE \'%" + wordInSubject + "%\'") + ("[Start] >= '" + startTime.ToString("g") + "' + [End] <= '" + endTime.ToString("g") + "'"); 

string filter = ("urn:schemas:mailheader:subject LIKE \'%" + wordInSubject + "%\'") AND ("[Start] >= '" + startTime.ToString("g") + "' AND [End] <= '" + endTime.ToString("g") + "'"); 

此外,在搜索时,我读到它应该以“ @ SQL =“开头-但是,即使那样的条件也会引发错误:-

string filter = "@SQL=""urn:schemas:mailheader:subject LIKE \'%" + wordInSubject + "%\'"

问题陈述:-

我不是专门寻找DateTime的情况。但是,我只能使用在单个过滤器字符串(任何类型的条件)中使用多个条件的语法。

link to advancedSearch() Method documentation

1 个答案:

答案 0 :(得分:1)

尝试使用DASL属性名称的以下查询:

@SQL=("http://schemas.microsoft.com/mapi/proptag/0x0E1D001F" LIKE '%test%') AND ("http://schemas.microsoft.com/mapi/proptag/0x0E060040" > '2017-09-25 00:00:00') AND ("http://schemas.microsoft.com/mapi/proptag/0x0E060040" < '2018-09-25 00:00:00')

它对PR_NORMALIZED_SUBJECT_W(DASL名称http://schemas.microsoft.com/mapi/proptag/0x0E1D001F)和PR_MESSAGE_DELIVERY_TIME(DASL名称http://schemas.microsoft.com/mapi/proptag/0x0E060040)使用限制。

可以在OutlookSpy中检索

DASL属性名称(单击IMessage按钮,选择属性,请参见DASL文本框)。