Outlook事件列表的OData无法按“ Id”排序

时间:2018-09-18 15:09:13

标签: c# microsoft-graph outlook-restapi

我试图在this documentation之后从Microsoft Graph获取事件列表。

我想先按lastModifiedDateTime然后按id的顺序获取列表。

这是示例查询:

var getResource = string.Format("/me/calendar/events/?$filter=lastModifiedDateTime ge {0}&$orderBy=lastModifiedDateTime, id", XmlConvert.ToString(updatedMin, XmlDateTimeSerializationMode.Utc));

但是,当我执行它时,会导致错误:

{
  "error": {
    "code": "ErrorInvalidProperty",
    "message": "The property 'Id' does not support filtering.",
    "innerError": {
      "request-id": "bb56a0d0-46f3-4b7c-80bd-043a0b3fd8b5",
      "date": "2018-09-17T15:23:40"
    }
  }
}

实际上,我没有在Id中设置$filter,而是将其设置为$orderby

当我尝试从Id中排除$orderby时,它起作用了。这是有效的查询:

var getResource = string.Format("/me/calendar/events/?$filter=lastModifiedDateTime ge {0}&$orderBy=lastModifiedDateTime", XmlConvert.ToString(updatedMin, XmlDateTimeSerializationMode.Utc));

有人知道如何基于Id来排序列表吗?

1 个答案:

答案 0 :(得分:0)

您无法通过id进行订购,这样做也没有任何意义。 id是多个属性(主题,路径等)的哈希组合。因此,它们的价值既不可订购也不是人类可读的。

例如,这是实际的id值:

AAMkAGVmMDEzMTM4LTZmYWUtNDdkNC1hMDZiLTU1OGY5OTZhYmY4OABGAAAAAAAiQ8W967B7TKBjgx9rVEURBwAiIsqMbYjsT5e-T7KzowPTAAAAAAENAAAiIsqMbYjsT5e-T7KzowPTAACNM9xPAAA=

此外,我强烈建议您使用Microsoft Graph .NET Client而不是自己动手。这将有助于减少学习难度并为您提供更具可读性的代码:

await graphClient.Me
   .Calendar
   .Events
   .Request()
   .Filter("lastModifiedDateTime ge {dateTime}")
   .OrderBy("lastModifiedDateTime") 
   .GetAsync();