首页 > 解决方案 > Graph API 查询 - 如何结合展开和选择

问题描述

我有以下工作代码,列出了 Sharepoint 站点中的所有文件,还获取了它们的 driveItem 详细信息:

        var directoryContents = await App.GraphClient.Sites[SiteIdShortName].Lists[sharedDocsDriveId]
            .Items
            .Request()
            .Expand(item => item.DriveItem)
            .GetAsync();
        SharedDocumentList.ItemsSource = directoryContents.CurrentPage.ToList();

现在,除了上述查询已经获取的数据之外,我还需要一种方法来获取每个项目的发布状态。我在stackoverflow上找到了这篇文章:

使用 microsoft graph api 检出 onedrive 文件的状态

因此,我尝试将代码更改为如下所示:

        var directoryContents = await App.GraphClient.Sites[SiteIdShortName].Lists[sharedDocsDriveId]
            .Items
            .Request()
            .Expand(item => item.DriveItem)
            .Select(item => item.DriveItem.Publication)
            .GetAsync();
        SharedDocumentList.ItemsSource = directoryContents.CurrentPage.ToList();

但我收到以下错误消息:

Message=Lambda 表达式中的匿名类型只能使用 ListItem 类型的直接成员初始化参数名称:selectExpression Source=Microsoft.Graph

编辑 1

我也试过这个:

        var queryOptions = new List<QueryOption>()
        {
            new QueryOption("select", "publication")
        };

        var directoryContents = await App.GraphClient.Sites[SiteIdShortName].Lists[sharedDocsDriveId]
            .Items
            .Request(queryOptions)
            .Expand(item => item.DriveItem)
            .GetAsync();
        SharedDocumentList.ItemsSource = directoryContents.CurrentPage.ToList();

但我得到的错误是:

内部异常 1:JsonReaderException: '{' 在值之后无效。应为“,”、“}”或“]”。行号:0 | 字节位置行内:223。

标签: c#sharepointmicrosoft-graph-apixamarin.uwp

解决方案


这对我有用。在Expand我已经指定了要扩展的属性,其中select声明了在driveItem

var directoryContents = await App.GraphClient.Sites[SiteIdShortName].Lists[sharedDocsDriveId]
        .Items
        .Request()
        .Expand("driveItem($select=publication)")
        .GetAsync();
SharedDocumentList.ItemsSource = directoryContents.CurrentPage.ToList();

推荐阅读