在文件夹中项的正文内搜索某短语

此示例在收件箱中项的正文内搜索字符串“office”。

示例

该代码示例使用 DAV 搜索和定位 (DASL) 语法指定查询。 为了构造筛选器,该代码示例先检查默认存储区中是否已启用"即时搜索",以确定是否将 ci_phrasematch 关键字用于在项目正文中对"office"进行精确短语匹配,或将 like 关键字用于对在项目正文中以精确字符串或子字符串形式出现的任何"office"进行匹配。 然后,该示例将筛选器应用于收件箱的 GetTable 方法,并在 Table 对象中获取结果。 接下来,此代码示例显示 Table 中每个返回项的主题。

此代码示例使用命名空间表示法 urn:schemas:httpmail:textdescription 指定 Body 属性。

使用 ci_phrasematch 关键字的语法为:

<PropertySchemaName> ci_phrasematch <ComparisonString>

使用 like 关键字进行前缀匹配的语法为:

<PropertySchemaName> like <Token>%

使用 like 关键字进行任何子字符串匹配的语法为:

<PropertySchemaName> like %<Token>%

如果使用 Visual Studio 测试此代码示例,必须先添加对 Microsoft Outlook 15.0 对象库组件的引用,并在导入 Microsoft.Office.Interop.Outlook 命名空间时指定 Outlook 变量。 不得将 Importsusing 语句直接添加到此代码示例中的函数前面,这两个语句必须后跟公共类声明。 下面的代码行演示了如何在 Visual Basic 和 C# 中执行导入和分配。

Imports Outlook = Microsoft.Office.Interop.Outlook
using Outlook = Microsoft.Office.Interop.Outlook;
Private Sub DemoSearchBody()
    Dim filter As String
    If (Application.Session.DefaultStore.IsInstantSearchEnabled) Then
        filter = "@SQL=" & Chr(34) _
            & "urn:schemas:httpmail:textdescription" & Chr(34) _
            & " ci_phrasematch 'office'"
    Else
        filter = "@SQL=" & Chr(34) _
            & "urn:schemas:httpmail:textdescription" & Chr(34) _
            & " like '%office%'"
    End If
    Dim table As Outlook.Table = _
        Application.Session.GetDefaultFolder( _
        Outlook.OlDefaultFolders.olFolderInbox).GetTable( _
        filter, Outlook.OlTableContents.olUserItems)
    While Not (table.EndOfTable)
        Dim row As Outlook.Row = table.GetNextRow()
        Debug.WriteLine(row("Subject"))
    End While
End Sub
private void DemoSearchBody()
{
    string filter;
    if (Application.Session.DefaultStore.IsInstantSearchEnabled)
    {
        filter = "@SQL=" + "\""
            + "urn:schemas:httpmail:textdescription" + "\""
            + " ci_phrasematch 'office'";
    }
    else
    {
        filter = "@SQL=" + "\""
            + "urn:schemas:httpmail:textdescription" + "\""
            + " like '%office%'";
    }
    Outlook.Table table = Application.Session.GetDefaultFolder(
        Outlook.OlDefaultFolders.olFolderInbox).GetTable(
        filter, Outlook.OlTableContents.olUserItems);
    while (!table.EndOfTable)
    {
        Outlook.Row row = table.GetNextRow();
        Debug.WriteLine(row["Subject"]);
    }
}

另请参阅