Graph API查询文件夹文件时如何按需返回driveItem的listItem属性?
解决Microsoft Graph API中DriveItem展开ListItem并筛选Fields的问题
你遇到的这个不一致情况,核心原因是fields属于listItem的导航属性,而非普通属性——不能直接在listItem的$select里指定,必须对fields单独执行$expand+$select操作。
满足你三个需求的正确查询写法如下:
https://graph.microsoft.com/v1.0/drives/{{drive-id}}/items/{{folder-id}}/children?$select=id&$expand=listItem($select=id;$expand=fields($select=col1,col2))
各部分作用说明:
$select=id:仅返回DriveItem的id,实现精简返回的需求$expand=listItem($select=id;...):展开关联的listItem,并仅保留其id属性$expand=fields($select=col1,col2):在listItem的展开逻辑中,进一步展开fields导航属性,同时只筛选你需要的字段(比如示例中的col1、col2)
这个写法会返回完全符合要求的结果:每个DriveItem仅包含id,其关联的listItem仅包含id和指定字段的fields,同时满足:
- 通过drive端点获取文件夹子项
- 成功展开每个DriveItem的listItem属性
- 精准筛选listItem的属性及fields的指定子集
对比你之前的写法,核心差异在于:不能把fields当作listItem的普通属性用$select拉取,必须通过嵌套的$expand=fields(...)来获取这个导航属性的内容——这也是和直接查询list端点的逻辑区别(直接查询list时,fields是顶层导航属性,可直接$expand=fields)。
内容的提问来源于stack exchange,提问作者EduardoCMB
相关产品推荐
相关产品推荐

