C# 使用文件夹获取子文件';IDs-客户端对象模型

C# 使用文件夹获取子文件';IDs-客户端对象模型,c#,sharepoint,sharepoint-2010,caml,sharepoint-clientobject,C#,Sharepoint,Sharepoint 2010,Caml,Sharepoint Clientobject,我想得到一些文件夹-子文件。我在列表中有SharePoint ID的所有文件夹。我的代码正在运行,但性能非常差,因为有很多context.ExecuteQuery 我想用一个Caml查询 using (var context = new ClientContext("http://xxx/haberlesme/")) { var web = context.Web; var list = context.Web.Lists.GetById(new Guid(target));

我想得到一些文件夹-子文件。我在列表中有SharePoint ID的所有文件夹。我的代码正在运行,但性能非常差,因为有很多
context.ExecuteQuery

我想用一个Caml查询

using (var context = new ClientContext("http://xxx/haberlesme/"))
{
    var web = context.Web;
    var list = context.Web.Lists.GetById(new Guid(target));

    int[] siraliIdArray;
    //siraliIdArray = loadSharePointIDList(); think like this

    for (var j = 0; j < siraliIdArray.Count; j++)
    {
        var folderName = listItemCollection[j]["Title"].ToString();//Folder Name
        var currentFolder = web.GetFolderByServerRelativeUrl("/haberlesme/Notice/" + folderName);
        var currentFiles = currentFolder.Files;

        context.Load(currentFiles);

        //I don't want to execute for n folder n times. I want to execute n folder 1 time.
        context.ExecuteQuery();

        var ek = new LDTOTebligEk();

        //I don't want to add one - one 
        foreach (var file1 in currentFiles)
        {
            ek.DokumanPath = urlPrefix + folderName + "/" + file1.Name;
            ek.DokumanAd = file1.Name;

            ekler.Add(ek);

        }
    }
}
使用(var context=newclientcontext(“http://xxx/haberlesme/"))
{
var web=context.web;
var list=context.Web.Lists.GetById(新Guid(目标));
国际[]西拉里达里;
//siralidarray=loadSharePointIDList();像这样思考
对于(var j=0;j

例如,我有100个文件夹,但我想在一次执行中获得10个文件夹子文件夹

Microsoft.SharePoint.Client.List list = clientContext.Web.Lists.GetByTitle("Main Folder");

Microsoft.SharePoint.Client.CamlQuery caml = new Microsoft.SharePoint.Client.CamlQuery();

caml.ViewXml = @"<View><Query><Where><Eq><FieldRef Name='FileLeafRef'/><Value Type='Folder'>SubFolderName</Value></Eq></Where></Query></View>";

caml.FolderServerRelativeUrl = " This line should be added if the main folder is not in the site layer";

Microsoft.SharePoint.Client.ListItemCollection items = list.GetItems(caml);

clientContext.Load(items);

//Get your folder using items[0]
Microsoft.SharePoint.Client.List List=clientContext.Web.Lists.GetByTitle(“主文件夹”);
Microsoft.SharePoint.Client.CamlQuery caml=新的Microsoft.SharePoint.Client.CamlQuery();
caml.ViewXml=@“子文件夹名称”;
caml.FolderServerRelativeUrl=“如果主文件夹不在站点层中,则应添加此行”;
Microsoft.SharePoint.Client.ListItemCollection items=list.GetItems(caml);
clientContext.Load(项目);
//使用项目[0]获取您的文件夹
因为CSOM API支持:

CSOM编程模型是围绕请求批处理构建的。当你 使用CSOM,您可以在计算机上执行一系列数据操作
ClientContext
对象。这些操作将提交到中的服务器 调用
ClientContext.BeginExecuteQuery时的单个请求
方法

您可以重构代码,如下所示:

var folders = new Dictionary<string,Microsoft.SharePoint.Client.Folder>();
var folderNames = new[] {"Orders","Requests"};
foreach (var folderName in  folderNames)
{
   var folderKey = string.Format("/Shared Documents/{0}", folderName);
   folders[folderKey] = context.Web.GetFolderByServerRelativeUrl(folderKey);
   context.Load(folders[folderKey],f => f.Files);
}
context.ExecuteQuery();  //execute request only once




//print all files
var allFiles = folders.SelectMany(folder => folder.Value.Files);
foreach (var file in allFiles)
{
   Console.WriteLine(file.Name);
}
var folders=newdictionary();
var folderNames=new[]{“订单”,“请求”};
foreach(folderNames中的var folderName)
{
var folderKey=string.Format(“/Shared Documents/{0}”,folderName);
folders[folderKey]=context.Web.GetFolderByServerRelativeUrl(folderKey);
Load(文件夹[folderKey],f=>f.Files);
}
context.ExecuteQuery()//只执行一次请求
//打印所有文件
var allFiles=folders.SelectMany(folder=>folder.Value.Files);
foreach(所有文件中的var文件)
{
Console.WriteLine(file.Name);
}

是不是
cLientcontext
由SPMetal.exe生成的实体文件?不是,它是一个类似于“Microsoft.SharePoint.Client.dll”上的“public class cLientcontext:ClientRuntimeContext”的类。我已经编辑了您的标题。请参阅“”,其中的共识是“不,他们不应该”。