有没有办法从ListItem获取Folder对象?

我正在尝试使用客户端对象模型(.Net 4.0)在SharePoint 2010客户端应用程序中通过其路径获取Folder对象。

我需要检查库中是否存在’folderPath’变量描述的文件夹,然后获取Folder对象以进行进一步的操作。 为了提高性能,我选择使用CAML查询来过滤列表。

我的代码:

IEnumerable library = this.clientContext.LoadQuery( this.clientContext.Web.Lists.Where(p => p.Title == this.documentLibrary)); this.clientContext.ExecuteQuery(); List libraryList = library.FirstOrDefault(); //code to handle libraryList == null CamlQuery camlQuery = new CamlQuery(); camlQuery.ViewXml = "" + "" + "" + "" + "" + "" + "1" + "" + "" + "" + "" + folderPath + "" + "" + "" + "" + "" + ""; ListItemCollection items = libraryList.GetItems(camlQuery); clientContext.Load(items); clientContext.ExecuteQuery(); 

到目前为止一切正常。 但我不知道如何从项目中获取“文件夹”对象。 我试着这样做:

 Folder folder = items.FirtsOrDefault().Folder; clientContext.Load(folder); clientContext.ExecuteQuery(); 

那样(用来代替第一个代码片段中的最后三行):

 ListItemCollection items = libraryList.GetItems(camlQuery); clientContext.Load(items, collection => collection.Include(item => item.Folder)); clientContext.ExecuteQuery(); 

但在这两种情况下我都有一个例外:

第1名:’字段或属性’文件夹’不存在。

第二:’列’文件夹’不存在。 它可能已被其他用户删除。

有办法吗? 或者也许我做错了什么? 在此先感谢您的帮助。

它实际上取决于使用的是哪个版本的SharePoint。

SharePoint 2013

在SharePoint 2013中,CSOM ListItem.Folder属性获取与文件夹项关联的文件夹对象。

SharePoint 2010

在SharePoint 2010中, 不会为ListItem对象公开CSOM文件夹属性。

以下方法可用于检索与ListItem关联的Folder

 ///  /// Get Parent Folder for List Item ///  ///  ///  private static Folder GetListItemFolder(ListItem listItem) { var folderUrl = (string)listItem["FileDirRef"]; var parentFolder = listItem.ParentList.ParentWeb.GetFolderByServerRelativeUrl(folderUrl); listItem.Context.Load(parentFolder); listItem.Context.ExecuteQuery(); return parentFolder; } 

例:

 using (var context = new ClientContext(webUrl)) { var list = context.Web.Lists.GetByTitle(listTitle); var items = list.GetItems(CamlQuery.CreateAllItemsQuery()); context.Load(items); context.ExecuteQuery(); foreach (var item in items) { var folder = GetListItemFolder(item); //get Folder Console.WriteLine(folder.Name); } }