VB.net中MS EWS 2.0组合And/Or逻辑的SearchFilter语法求助
VB.NET 环境下EWS 2.0 多条件组合搜索实现代码
EWS 中嵌套 And/Or 逻辑需要使用 SearchFilter.SearchFilterCollection 实现,每个集合可指定全局逻辑运算符(And/Or),嵌套不同逻辑的集合即可匹配你的需求。
完整可运行代码示例:
' 导入必要命名空间(需要先引用EWS 2.0程序集) Imports Microsoft.Exchange.WebServices.Data ' 1. 定义独立筛选条件 ' 已读条件 Dim isReadFilter As New SearchFilter.IsEqualTo(EmailMessageSchema.IsRead, True) ' 未读条件 Dim isUnreadFilter As New SearchFilter.IsEqualTo(EmailMessageSchema.IsRead, False) ' 最后修改时间>=指定时间条件 Dim targetModifyTime As DateTime = DateTime.Parse("2021-10-08 16:30") Dim timeFilter As New SearchFilter.IsGreaterThanOrEqualTo(EmailMessageSchema.LastModifiedTime, targetModifyTime) ' 2. 组合【未读 且 时间符合】的And逻辑 Dim unreadAndTimeValid As New SearchFilter.SearchFilterCollection(LogicalOperator.And) unreadAndTimeValid.Add(isUnreadFilter) unreadAndTimeValid.Add(timeFilter) ' 3. 组合【已读 或 (未读且时间符合)】的Or逻辑,得到最终筛选器 Dim finalSearchFilter As New SearchFilter.SearchFilterCollection(LogicalOperator.Or) finalSearchFilter.Add(isReadFilter) finalSearchFilter.Add(unreadAndTimeValid) ' 4. 直接使用finalSearchFilter执行搜索即可,示例如下: ' Dim view As New ItemView(100) ' Dim result = exchangeService.FindItems(WellKnownFolderName.Inbox, finalSearchFilter, view)
注意事项
- 需提前正确初始化EWS的
ExchangeService对象,完成身份认证 - 时间比较不要用
IsEqualTo筛选器,需使用对应比较逻辑的IsGreaterThanOrEqualTo筛选器 - 若存在时区偏差问题,可将
targetModifyTime声明为DateTimeOffset类型适配时区
内容的提问来源于stack exchange,提问作者Sean ZA
相关产品推荐
相关产品推荐

