_Items.Restrict(String) 方法

定义

将筛选器应用于 Items 集合,返回一个新集合,其中包含与筛选器匹配的原始项的所有项。

public:
 Microsoft::Office::Interop::Outlook::Items ^ Restrict(System::String ^ Filter);
public Microsoft.Office.Interop.Outlook.Items Restrict (string Filter);
Public Function Restrict (Filter As String) As Items

参数

Filter
String

要应用的筛选器字符串表达式。 有关详细信息,请参阅 Find(String) 方法。

返回

一个 Items 集合,表示原始 Items 集合中与筛选器匹配的

注解

此方法是使用 Find(String)FindNext() 方法循环访问集合中的特定项的替代方法。 如果集合中只有较少数量的项目,FindFindNext 方法要比筛选更快。 如果集合中项目较多,尤其是预计在大型集合中仅可查找到少量几个项目时,Restrict 方法的速度会明显更快。

注意:如果使用用户定义的字段作为 FindRestrict 子句的一部分,则用户定义的字段必须存在于 文件夹中。 否则代码会产生错误,指出字段未知。 可以通过显示“字段选择器”然后单击“新建”来将字段添加到文件夹中。

此方法不能与下列属性一起使用,否则将导致错误:

BodyCategoriesChildrenClassCompaniesCompanyLastFirstNoSpaceCompanyLastFirstSpaceOnlyContactNamesContactsConversationIndexDLNameEmail1EntryIDEmail2EntryIDEmail3EntryIDEntryIDHTMLBodyIsOnlineMeetingLastFirstAndSuffixLastFirstNoSpaceAutoResolvedWinnerBodyFormatInternetCodePagePermissionLastFirstNoSpaceCompanyLastFirstSpaceOnlyLastFirstSpaceOnlyCompanyLastFirstNoSpaceAndSuffixMemberCountNetMeetingAliasNetMeetingAutoStartNetMeetingOrganizerAliasNetMeetingServerNetMeetingTypeRecurrenceStateReplyRecipientsReceivedByEntryIDRecevedOnBehalfOfEntryIDResponseStateSavedSentSubmittedVotingOptionsDownloadStateIsConflictMeetingWorkspaceURL

创建 Find 方法和 Restrict 方法的筛选器

根据要筛选的字段类型,筛选器的语法将有所不同。

字符串(适用于文本字段)

搜索“文本”字段时,可以使用撇号 (') 或双引号 (“”) 来分隔作为筛选器一部分的值。 例如,当字段类型为 C#) 中的 字符串 (字符串 时,以下所有行都正常运行:

sFilter = “[CompanyName] = 'Microsoft'”

sFilter = “[CompanyName] = ”“Microsoft”“”

sFilter = “[CompanyName] = ” & Chr (34) & “Microsoft” & Chr (34)

在 Jet 或 DASL 查询中指定筛选器的过程中,如果使用一对单引号来分隔构成筛选器的字符串,而且该字符串包含另一个单引号或撇号,则应在这个单引号或撇号前面添加一个单引号以用作转义符。 如果使用一对双引号来分隔字符串,则也可使用类似方法。 如果该字符串包含一个双引号,则应在该双引号前面添加一个双引号以用作转义符。

例如,在筛选 Subject 属性等于单词的 DASL 筛选器字符串中,整个筛选器字符串由一对双引号分隔,而嵌入的字符串不能由一对单引号分隔。 此筛选器字符串中有三个字符需要转义:起始双引号和结束双引号用于 的属性引用 http://schemas.microsoft.com/mapi/proptag/0x0037001f,以及单词的值条件中的撇号不能。 通过应用适当的转义符,您可将筛选器字符串表示如下:

filter = “@SQL=”“http://schemas.microsoft.com/mapi/proptag/0x0037001f” = 'can't'”

或者,也可使用 chr(34) 函数来代表用作转义符的双引号(其 ASCII 字符值为 34)。 通过使用 chr(34) 代替双引号转义符,您可将上一个示例表示如下:

filter = “@SQL= ” & Chr (34) & “http://schemas.microsoft.com/mapi/proptag/0x0037001f” _

& Chr (34) & “ = ” & “'can't'”

对于使用 ci_startswithci_phrasematch 运算符的 DASL 查询而言,转义单引号和双引号字符也是必需的。 例如,以下查询可在邮件主题中执行针对 can't 的短语匹配查询:

filter = “@SQL=” & Chr (34) &“http://schemas.microsoft.com/mapi/proptag/0x0037001E” _

& Chr (34) & “ci_phrasematch” & “'不能'

另一个示例是一个 DASL 筛选器字符串,该字符串筛选 Subject 属性是否等于单词“正确内容”,其中“内容”一词用双引号括起来。 在此情况下,必须通过以下方式对括起的双引号进行转义:

filter = “@SQL=”“http://schemas.microsoft.com/mapi/proptag/0x0037001f” = 'right “”stuff“'”

对于包含空格、单引号、双引号或百分号字符的命名属性,对这些属性的引用将应用一组不同的转义规则。 有关更多信息,请参阅按命名空间引用属性。

日期

虽然日期和时间通常以“日期”格式存储,但 FindRestrict 方法要求将日期和时间转换为字符串表示形式。 为确保日期的格式满足 Microsoft Outlook 的要求,请使用 Format 函数。 以下示例创建了筛选器以查找所有在 1999 年 1 月 15 日下午 3:30 以后修改过的联系人。

sFilter = “[LastModificationTime] > '” & Format (“1/15/99 3:30pm”, “dddd h:nn AMPM”) & “'”

布尔运算符

Boolean 运算符、TRUE/FALSE、YES/NO 和 ON/OFF 等都不应转换为字符串。 例如,要确定是否已为联系人启用日记,可使用以下筛选器:

sFilter = “[日记] = True”

注意:如果将引号用作 布尔 字段的分隔符,则空字符串将查找字段为 False 的项目,所有非空字符串将查找其字段为 True 的项目。

关键字(或类别)

“类别”字段属于关键字类型,用于保存多个值。 如果以编程方式进行访问,类别字段的行为类似文本字段,且字符串必须完全匹配。 文本字符串中的值将通过逗号和空格分隔。 这通常意味着,当关键字字段包含多个值时,不能使用 FindRestrict 方法对关键字字段进行操作。 例如,如果“商务”类别和“商务和社会”类别中各包含一个联系人,则无法轻松使用 FindRestrict 方法检索“商务”类别中的所有项目。 但可循环遍历文件夹中的所有联系人,并使用 Instr 函数测试字符串“商务”是否包含在整个关键字字段中。

注意:一个可能的例外是,如果将“类别”字段限制为两个,或者值数较少。 此时,可以使用 FindRestrict 方法结合 OR 逻辑运算符来检索所有商务联系人。 例如(在伪代码中):“商务” OR “商务, 个人” OR “个人, 商务”。 类别字符串不区分大小写。

整数

可以搜索带引号或不使用引号作为分隔符的 整数 字段。 下列筛选器将查找使用 Outlook 2000 创建的联系人:

sFilter = “[OutlookInternalVersion] = 92711”

sFilter = “[OutlookInternalVersion] = '92711'”

使用变量作为筛选器的一部分

Restrict 方法示例所示,可使用变量中的值作为筛选器的一部分。 以下 Microsoft Visual Basic 代码示例演示了使用变量作为筛选器一部分的语法。

sFullName = “Dan Wilson”

' 此方法使用 Chr (34) 来分隔值。

sFilter = “[FullName] = ” & Chr (34) & sFullName & Chr (34)

' 此方法使用双引号分隔值。

sFilter = “[FullName] = ”“” & sFullName &“””

使用逻辑运算符作为筛选器的一部分

可以使用的逻辑运算符为 AND、OR 和 NOT。 下面是 Restrict 方法的 子句变体,因此可以指定多个条件。

OR:以下代码返回所有类别为“商务”或“个人”的联系人项目。

sFilter = “[Categories] = 'Personal' or [Categories] = 'Business'”

AND:以下代码检索所有工作单位为 Microsoft 的私人联系人。

sFilter = “[Categories] = 'Personal' and [CompanyName] = 'Microsoft'”

NOT:以下代码检索所有工作单位不是 Microsoft 的私人联系人。

sFilter = “[Categories] = 'Personal' and Not ([CompanyName] = 'Microsoft') ”

其他注意事项

如果试图通过用户定义的字段使用 FindRestrict 方法,这些字段必须在文件夹中已定义,否则将发生错误。 无法执行“包含”操作。 例如,不能使用 FindRestrict 搜索“主题”字段中包含特定字词的项目。 相反,可以使用 AdvancedSearch(String, Object, Object, Object) 方法,也可以循环访问文件夹中的所有项目,并使用 InStr 函数在字段中执行搜索。 可以使用 Restrict 方法搜索以特定范围内的字符开始的项目。 例如,若要搜索姓氏以字母 M 开头的所有联系人,请使用以下筛选器:

sFilter = “[LastName] > 'LZZZ' and [LastName] < 'N'”

适用于