Google Drive API v3如何按MimeType过滤响应并处理文件夹
问题分析
你遇到的类型转换错误,是因为Where方法返回的是符合筛选条件的文件/文件夹集合(IEnumerable<T>类型),而非布尔值,不能直接放在if的条件判断中。你需要的是遍历每个符合条件的文件夹执行操作,而非判断“是否存在文件夹”。
解决方案
直接通过foreach循环遍历筛选出的文件夹集合,逐个执行特定操作;同时分离非文件夹的处理逻辑,示例代码如下:
do { var response = await listRequest.ExecuteAsync(); // 遍历所有文件夹,执行专属操作 foreach (var folder in response.Files.Where(f => f.MimeType == "application/vnd.google-apps.folder")) { // 这里写针对单个文件夹的操作逻辑 // 示例:Console.WriteLine($"处理文件夹: {folder.Name}"); } // 处理非文件夹(排除指定名称的文件后映射添加) var validNonFolderFiles = response.Files .Where(f => f.MimeType != "application/vnd.google-apps.folder" && f.Name != "$ExclaimerSignatures") .Select(f => mapFile(f)); files.AddRange(validNonFolderFiles); listRequest.PageToken = response.NextPageToken; } while (listRequest.PageToken != null);
如果需要更清晰的逻辑分离,也可以先将文件拆分为文件夹和非文件夹两组:
do { var response = await listRequest.ExecuteAsync(); var folders = response.Files.Where(f => f.MimeType == "application/vnd.google-apps.folder"); var nonFolders = response.Files.Where(f => f.MimeType != "application/vnd.google-apps.folder"); // 处理每个文件夹 foreach (var folder in folders) { // 你的文件夹操作逻辑 } // 处理非文件夹,排除指定名称后映射添加 var validNonFolders = nonFolders.Where(f => f.Name != "$ExclaimerSignatures").Select(mapFile); files.AddRange(validNonFolders); listRequest.PageToken = response.NextPageToken; } while (listRequest.PageToken != null);
核心逻辑:用Where筛选目标集合,再通过foreach遍历集合内的每个元素执行操作,而非把集合当作布尔值进行判断。
内容的提问来源于stack exchange,提问作者mharre
相关产品推荐
相关产品推荐

