Office 365 日历 API - 在 C# 客户端库中按日期过滤事件

Posted

技术标签:

【中文标题】Office 365 日历 API - 在 C# 客户端库中按日期过滤事件【英文标题】:Office 365 Calendar API - Filtering Events by Date in C# Client Libraries 【发布时间】:2016-07-22 21:15:11 【问题描述】:

在客户端库中,您可以对日历事件请求应​​用 LINQ 过滤:

var events = await (from i in Client.Me.Events where i.Subject == "Desired Event Name" select i)
    .Take(50)
    .ExecuteAsync();

或者可以使用 Where 方法,但是对于 StartEnd 字段,当我们希望来自特定时间段的事件过滤不能用作DateTime 存储为字符串。 DateTime.Parse 方法的调用会导致异常。 这绝对应该是可以实现的,我什至认为这在某些时候是可能的,并且可以使用 REST 来完成。 begin/finish 属性根据文档进行索引。当然,一旦收到结果就可以过滤,但在这种情况下,我四岁就开始收到事件了。在这种方法中,通过 IPagedCollection 中的所有页面确实需要很多时间。幸运的是,尽管这些事件似乎是按日期排序的,所以一旦事件在您的时间段之后开始,您就可以停止获取新页面。

【问题讨论】:

【参考方案1】:

您初始化 OutLookServicesClient 的 Office 365 REST API 版本是什么?我可以使用 v1.0 API 过滤事件。您可以参考下面的代码来使用 LINQ 来过滤 with start 和 end 属性:

   OutlookServicesClient client = new OutlookServicesClient(new Uri("https://outlook.office.com/api/v1.0/"), () =>
        
            return Task.Delay(10).ContinueWith(t => accessToken);
        );



        var events = await (from i in client.Me.Events where (i.Start > DateTimeOffset.Parse("2016-07-18") && i.End< DateTimeOffset.Parse("2016-07-25")) select i)
                        .Take(50)
                        .ExecuteAsync();

        foreach (var appointment in events.CurrentPage)
        
            Console.WriteLine($"appointment.Subject:\tappointment.Start~appointment.End");
        

更新(V2.0)

安装V2.0管理程序集Install-Package Microsoft.Office365.OutlookServices-V2.0

代码:

  OutlookServicesClient client = new OutlookServicesClient(new Uri("https://outlook.office.com/api/v2.0/"), () =>
        
            return Task.Delay(10).ContinueWith(t => accessToken);
        );

        var events = await (from i in client.Me.Events where (i.Start.DateTime.CompareTo("2016-07-18")>0 && i.End.DateTime.CompareTo("2016-07-25")<0) select i)
                  .Take(50)
                  .ExecuteAsync();

        foreach (var appointment in events.CurrentPage)
        
            Console.WriteLine($"appointment.Subject:\tappointment.Start~appointment.End");
        

【讨论】:

我使用的是 2.0,似乎他们更改了 end/start 属性的类型,因为您的代码在 2.0 中产生了编译时错误。您可能需要使用 1.0 来执行此操作。 是的,上面的示例使用的是 1.0。我将在我的帖子中更新 2.0 管理 API 示例【参考方案2】:

我。我仍然没有找到使用 LINQ 查询事件的解决方案。要查看指定的时间间隔,可以使用 Client.Me.CalendarView(from as DateTimeOffset, to as DateTimeOffset)Client.Me.Calendars["&lt;valid calendar id&gt;"].CalendarView(from, to)。按功能过滤可能是客户端代码独有的。

【讨论】:

以上是关于Office 365 日历 API - 在 C# 客户端库中按日期过滤事件的主要内容,如果未能解决你的问题,请参考以下文章

OA系统与Exchange 日历打通

使用来自单个域管理员帐户的O365 REST API访问其他用户日历

尝试从 Office 365 获取日历时访问令牌验证失败

在没有 Office 365 订阅的情况下使用 Azure 多租户应用程序访问用户日历信息

office365有啥用?

使用服务帐户访问其他用户日历