如何使用 Microsoft Graph 和 Linq 之类的语言查询 SharePoint 中的文件?

问题描述 投票:0回答:1

我有一个 .Net Core 应用程序,用于从 SharePoint 收集文件,然后将这些文件中的数据导入到数据库中。 SharePoint 文件夹会定期更新,我们会再次对文件夹进行爬网以查找文件。一切正常,但有点慢。我们就是这样做的:

  1. 在数据库中运行查询并获取已导入的文件名列表。
  2. 当图形命令运行时,我将每个文件名与列表进行比较,看看我们是否已经导入了该文件。如果是这样,我就跳过它。如果没有,我会将该文件添加到要导入的文件列表中。

虽然这确实有效,但上传到 SharePoint 的文件越多,速度就越慢,因为我仍然需要触摸每个文件以查看是否已导入它。

我知道我可以使用 Microsoft Graph 进行搜索,但我不确定如何进行。我想做类似的事情:

List<string> FileNamesImported
context.xxxxx.where(x => !FileNamesImported.Contains(x.fileName))

它将返回一个驱动器列表,然后我可以用它来获取文件。我需要在 C# 中执行此操作。有谁知道该怎么做吗?

仅供参考 - 我正在使用应用程序权限,并且我知道如何让图形客户端工作。

谢谢!

c# .net-core sharepoint microsoft-graph-api
1个回答
0
投票

我们可以使用 Microsoft Search API 来搜索 OneDrive 和 SharePoint 内容

在 C# 中,我们需要使用 Microsoft Graph SDK 来处理此请求。

抱歉我对C#不太熟悉,所以找到了示例代码供大家参考。

1.设置您的项目:

确保您已安装 Microsoft Graph SDK。 您可以通过 NuGet 包管理器安装它:

Install-Package Microsoft.Graph

2.完整示例:

using Microsoft.Graph;
using Microsoft.Graph.Auth;
using Microsoft.Identity.Client;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;

class Program
{
    private static string clientId = "YOUR_CLIENT_ID";
    private static string[] scopes = { "Files.Read.All", "Sites.Read.All" };

    static async Task Main(string[] args)
    {   
        //Use the InteractiveBrowserProvider for authentication
        var interactiveBrowserProvider = new InteractiveBrowserProvider(clientId, scopes);
        var graphClient = new GraphServiceClient(interactiveBrowserProvider);

        //Define the search query to look for files in OneDrive or SharePoint
        var searchRequest = new SearchRequestObject
        {
            Requests = new List<SearchRequest>
            {
                new SearchRequest
                {
                    EntityTypes = new List<EntityType> { EntityType.DriveItem },
                    Query = new SearchQuery
                    {
                        QueryString = "project report"
                    }
                }
            }
        };

        //Send the search request and handle the response
        var searchResponse = await graphClient.Search.Query(searchRequest).Request().PostAsync();

        foreach (var result in searchResponse.Value)
        {
            foreach (var hit in result.HitsContainers.SelectMany(container => container.Hits))
            {
                Console.WriteLine($"Found file: {hit.Resource.Name} at {hit.Resource.WebUrl}");
            }
        }
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.