我在WPF / C#桌面应用程序中使用Google Calendar API v3,其中一部分应用程序从指定日期范围内的给定Google日历中检索事件列表。这些事件有一个名为EventType
的属性,它存储为Calendar事件对象的共享扩展属性,并在我的应用程序中保存为Enum
。
共享扩展属性是Google日历活动中的Dictionary<string, string>
对象,因此我的设置为:
['EventType', 'Training']
['EventType', 'Meeting']
['EventType', 'Demonstration']
['EventType', 'Social']
...等
这些扩展属性都设置得很好,我可以毫无问题地检索它们,但是我希望能够按多种事件类型进行过滤(例如,显示所有会议或演示的事件)
这是我目前的代码:
try
{
List<GoogleCalendarEvent> eventList = new List<GoogleCalendarEvent>();
using (CalendarService service = GoogleCalendarService.GetService())
{
EventsResource.ListRequest request = service.Events.List(CalendarId);
request.TimeMin = DateFrom;
request.TimeMax = DateTo;
request.ShowDeleted = false;
request.SingleEvents = true;
request.OrderBy = EventsResource.ListRequest.OrderByEnum.StartTime;
List<string> eventTypes = new List<string>();
foreach (var type in EventTypes)
eventTypes.Add($"EventType={type.ToString()}");
request.SharedExtendedProperty = eventTypes;
Events events = await request.ExecuteAsync();
if (events.Items != null && events.Items.Count > 0)
{
foreach (var eventItem in events.Items)
eventList.Add(new GoogleCalendarEvent(eventItem, this));
}
else
throw new Exception($"No events found for the time range {DateFrom.ToString("dd/MM/yyyy HH:mm")} - {DateTo.ToString("dd/MM/yyyy HH:mm")} within calendar '{Summary}'");
return (true, eventList, "");
}
}
catch (Exception ex)
{
return (false, null, ex.Message);
}
request.SharedExtendedProperty对象是一个Google.Apis.Util.Repeatable<string>
对象,它继承自IEnumerable<string>
。
以上代码无法检索任何结果,因为(我相信)它正在查找与所有给定EventType
值匹配的事件,而不是任何值。当我仅使用一个EventType
运行此代码时,将正确检索事件。在谷歌的API页面上关于这方面的文档非常少,我尝试过谷歌搜索,但没有运气,只有那些希望匹配多个属性而不是找到一个具有多个潜在价值的属性的人。
有人可以帮忙吗?