CAML查询以按层次结构顺序检索列表项

时间:2011-09-09 23:11:09

标签: c# sharepoint caml

我想知道是否可以订购从SharePoint返回的列表项(使用客户端对象API),以便它们按层次排序,而不是按照它们的创建顺序排序。

这需要保持文件夹结构不变。例如,如果这是一个结构:

folder001
-folder001_sub001
--item001
--item002
-folder002_sub002
--folder002_sub002_sub001
---item003
--item004
-item005

将以相同的顺序或至少以这种方式返回(首先是项目,然后是文件夹):

folder001
-item005
-folder001_sub001
--item001
--item002
-folder002_sub002
--item004
--folder002_sub002_sub001
---item003

这可以通过CAML查询吗?默认是按照创建顺序(通过列表中的索引号)返回事物

提前谢谢!

1 个答案:

答案 0 :(得分:1)

在这种情况下,我宁愿使用客户端对象模型而不是caml。你可以这样做(未经测试!):

void RecursiveListFolder(Folder folder, int indent = 0)
{
    clientContext.Load(folder.Folders);
    clientContext.ExecuteQuery();
    foreach (Folder folder in folder.Folders)
    {
        Console.WriteLine(new string(' ', indent) + folder.Name);
        RecursiveListFolder(folder, indent + 1);
    }

    clientContext.Load(folder.Files);
    clientContext.ExecuteQuery();
    foreach (File file in folder.Files)
    {
        Console.WriteLine(new string(' ', indent) + file.Name);
    }
}

此方法将以这种方式使用:

string siteUrl = "http://MyServer/sites/MySiteCollection";

ClientContext clientContext = new ClientContext(siteUrl);
Web web = clientContext.Web;
clientContext.Load(web.Lists);
clientContext.ExecuteQuery();
List list = web.Lists["MyList"];

RecursiveListFolder(list.RootFolder);